11

データベースに開始日と終了日があり、フォーム フィールドに $date 変数があります。私は現在、$date がデータベースの開始日/終了日、またはこれら 2 つの間の任意の日付であるすべての行をクエリしようとしています。

これは、daysAsSql のしくみに関するドキュメントで説明されていることとは正反対です。それを機能させる方法がわかりません。次の行は、コントローラーの検索条件として機能しません。

'? BETWEEN ? AND ?' => array($date, 'Item.date_start', 'Item.date_end'),

どんな助けでも大歓迎です。これは私を夢中にさせています。

完全なクエリと対応する SQL は次のとおりです。

$conditions = array(
            'conditions' => array(
            'and' => array(
                '? BETWEEN ? AND ?' => array($date, 'Item.date_start', 'Item.date_end'),
                'Item.title LIKE' => "%$title%",
                'Item.status_id =' => '1'
                )));

        $this->set('items', $this->Item->find('all', $conditions));



WHERE (('2012-10-06' BETWEEN 'Item.date_start' AND 'Item.date_end') AND (`Item`.`title` LIKE '%%') AND (`Item`.`status_id` = 1))
4

6 に答える 6

29
$conditions = array(
        'conditions' => array(
        'and' => array(
                        array('Item.date_start <= ' => $date,
                              'Item.date_end >= ' => $date
                             ),
            'Item.title LIKE' => "%$title%",
            'Item.status_id =' => '1'
            )));

上記のコードを試して、うまくいかないかどうか尋ねてください。

編集: @Aryan の要求に従って、1 か月間に登録されたユーザーを検索する必要がある場合:

$start_date = '2013-05-26'; //should be in YYYY-MM-DD format
$this->User->find('all', array('conditions' => array('User.reg_date BETWEEN '.$start_date.' AND DATE_ADD('.$start_date.', INTERVAL 30 DAY)')));
于 2012-08-13T10:13:56.003 に答える
-1
$data=$this->post->find('all')->where([ 'id'=>$id,
'price between'=>$price1,'and'=>$price2])->toArray();

このクエリは次のように機能します。

select * from post where id=$id and price between $price1 and $price2;

" -- 'price between'=>$price1 --" は "price between $price1" になります

于 2018-07-24T21:36:08.613 に答える