web-dev-qa-db-fra.com

CakePHP condition de recherche pour une requête entre deux dates

J'ai une date de début et une date de fin dans ma base de données et une variable $ date d'un champ de formulaire. J'essaie maintenant d'interroger toutes les lignes où $ date est soit = ​​date de début/fin dans la base de données, ou TOUTE date entre ces deux.

C'est un peu l'opposé de ce qui est décrit dans la documentation de la façon dont daysAsSl fonctionne. Je n'arrive pas à comprendre comment le faire fonctionner. La ligne suivante ne fonctionne pas comme condition de recherche dans le contrôleur:

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

Toute aide est grandement appréciée. Ça me rend fou.

Voici la requête complète et le code SQL correspondant:

$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))
9
Joshua
$conditions = array(
        'conditions' => array(
        'and' => array(
                        array('Item.date_start <= ' => $date,
                              'Item.date_end >= ' => $date
                             ),
            'Item.title LIKE' => "%$title%",
            'Item.status_id =' => '1'
            )));

Essayez le code ci-dessus et demandez si cela ne fonctionne pas pour vous.

Edit: Selon la demande de @Aryan, si nous devons trouver des utilisateurs enregistrés entre 1 mois et plus:

$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)')));
25
Arun Jain

Voici l'exemple de requête CakePHP BETWEEN.

Je définis mes tableaux en tant que variables, puis j'utilise ces variables dans mon appel de fonction de recherche CakePHP:

// just return these two fields
$fields = array('uri', 'page_views');

// use this "between" range
$conditions = array('Event.date BETWEEN ? and ?' => array($start_date, $end_date));

// run the "select between" query
$results = $this->Event->find('all', 
         array('fields'=>$fields, 
               'conditions'=>$conditions));

Réf de

3
Aditya P Bhatt

Exemple général pour la requête CakePHP 2.x

        $_condition = array("TABLENAME.id" => $id, "TABLENAME.user_id" => array_unique($_array), 'date(TABLENAME.created_at) BETWEEN ? AND ?' => array($start_date, $end_date));
        $result_array = $this->TABLENAME->find("all", array(
            'fields' => array("TABLENAME.id", "TABLENAME.user_id", 'TABLENAME.created_at'),
            "conditions" => $_condition,
            "group" => array("TABLENAME.id"), //fields to GROUP BY
            'joins' => array(
                array(
                    'alias' => 'T2',
                    'table' => 'TABLENAME2',
                    'type' => 'LEFT',
                    'conditions' => array('TABLENAME.t_id = TABLENAME2.t_id')
                ),
                array(
                    'alias' => 'T3',
                    'table' => 'TABLENAME3',
                    'type' => 'LEFT',
                    'conditions' => array(
                        'IF(
                           TABLENAME.t3_id > 0,
                                T2.f_id = T3.f_id,
                                TABLENAME.ff_id = T2.ff_id
                            )'
                    )
                ),
            ),
            'recursive' => 0
                )
        );
0
Abdul Rehman
$data=$this->post->find('all')->where([ 'id'=>$id,
'price between'=>$price1,'and'=>$price2])->toArray();

Cette requête fonctionne comme suit:

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

"- 'price between' => $ price1 -" devient "prix entre $ price1"

0
Riyaz Khan

Ceci est une requête IN BETWEEN plus efficace et plus compréhensible dans cakephp 2.x

$testing_log_device_site_name = $testingLogData['TestingLogDevice']['Siteid'];

$conditions = array('TestingLogDevice.dateee BETWEEN ? and ?' => array($start_date, $end_date));

$results = $this->TestingLogDevice->find('all', 
    array(
         'fields'=>array('dateee','timeee','Siteid'), 
         'conditions'=>array($conditions, 'TestingLogDevice.Siteid'=>$testing_log_device_site_name)
    )
);
pr($results);
0
A.A Noman