2009-08-13 12 views
0

私はCake PHPフレームワークには比較的新しいので、少し試してみました。私はブログのデータベースを作った。私はdebug()関数を使って、特定の年に投稿された投稿の配列を表示しようとしていました。 私はポストモデルで次の関数を書いています。PHPのデバッグ機能に問題がある

function findByYear($year = null){ 
     $date = $year.'-01-01 00:00:00'; 
     $end_date = $year.'-12-31 23:59:59'; 
     return $this->find('all',array('conditions'=>array('DATE(Post.date)'=>'>'.$date,'DATE(Post.date)'=>'<'.$end_date))); 

    } 

次に、posts_controllerにread関数を追加しました。

function read($year=null) { 
     if (!$year) { 
      $this->Session->setFlash('Please supply a year'); 
      $this->redirect(array('action'=>'index')); 
     } 
     $this->set('posts',$this->Post->findByYear($year)); 
    } 

最後に、読み取りビューファイル(read.ctp)を作成し、今では

<?php debug($posts) ?> 

でのデバッグ機能を含め、問題は、私は起動したとき、私は空の配列を取得していますということですURLのアクション: http://localhost/posts/read/2009 私は既に3つの投稿を持っていますが、私はそれらの配列を取得していません。 私は何が欠けていますか?

+0

テーブルのSQLダンプを追加できますか?投稿が検索クエリに一致していない可能性がありますか? –

+0

生成されたSQLを確認しましたか(app/config/core.phpで2に設定してください)? – dhofstet

+0

SELECT 'Post'.'id''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 'User'.'name'、' User'.'email'、 'User'.firstname'、' User'.'lastname'''''''''''''''''''''''''''''''' 'Post'.user_id' =' User'.'id')WHERE DATE( 'Post'.'date')= '<2009-12-31 23:59:59' –

答えて

1

条件配列は混在型(つまり、配列と同様に文字列を含むことができる)である可能性があります。日付の正確な一致ではなく範囲で作業しているので、日付ベースの基準を文字列として表現する方が簡単かもしれません。 (補助的な利点は、これが単なる人間が解析するのがはるかに簡単であるということで。)

$conditions = array(); 
$conditions[] = array('Post.id'=>$myId); 
$conditions[] = 'DATE(Post.date) > '.$date; 

$posts  = $this->find('all',array('conditions'=>$conditions)); 

もう一つのポイント - あなたの日付文字列を構築するためにmktime()機能を使用しての代わりに、単純に連結検討する必要があります。たとえば、文字列の先頭にパラメータがあり、最高のものが必要です。これは、$yearパラメータのいくつかの基本的な検証を提供することと、予期しない結果を得る可能性を減らすという二重の目的に役立ちます。たとえば、次のようにそれはほとんどあらゆる角度からの勝利ですので、どうしても欲しいものであるUNIXタイムスタンプ形式であなたの日付値の両方を設定します

$date  = mktime(0,0,0,1,1,$year); //$year.'-01-01 00:00:00'; 
$end_date = mktime(23,59,59,12,31,$year); //$year.'-12-31 23:59:59'; 

幸運を祈る!

2

"<"と ">"演算子の位置は "値"側ではなく "キー"側でなければならないため、問題があると思います。

'DATE(Post.date)' => '>'.$date 

'DATE(Post.date) >' => $date 

に同じことが他の条件に適用される変更します。

関連する問題