2017-05-31 12 views
0

私はcakephpプロジェクトを作成しました。私はPHP開発の初心者です。私はそれが本当に複雑なので、私はケーキでそれを実行することはできませんSQLクエリを持っています。cakephpのsqlクエリ

私のクエリは次のとおりです。

select * from schedules as s left join flight_plans as f on s.flight_plan_id = f.id 
left join drones as d on d.id = s.drone_ref 
where 
d.uid = "xxx" and 
is_approved = 1 and 
is_confirmed = 1 and 
is_finalized = 1 and 
DATE_FORMAT(s.start_timestamp, '%Y-%m-%d') <= DATE_FORMAT(NOW(), '%Y-%m-%d') and 
DATE_FORMAT(NOW(), '%H:%i:%s') >= DATE_FORMAT(DATE_SUB(start_timestamp,INTERVAL 1 HOUR) , '%H:%i:%s')and DATE_FORMAT(NOW(), '%H:%i:%s') <= DATE_FORMAT(s.start_timestamp, '%H:%i:%s') and ((
s.type = 0 and 
DATE_FORMAT(NOW(), '%Y-%m-%d') BETWEEN DATE_FORMAT(s.start_timestamp, '%Y-%m-%d') and s.end_timestamp) 
or (
s.end_timestamp IS NULL and 
s.type = 1 and 
(DAYOFWEEK(NOW()) = s.monday or 
DAYOFWEEK(NOW()) = s.tuesday or 
DAYOFWEEK(NOW()) = s.wednesday or 
DAYOFWEEK(NOW()) = s.thursday or 
DAYOFWEEK(NOW()) = s.friday or 
DAYOFWEEK(NOW()) = s.saturday or 
DAYOFWEEK(NOW()) = s.sunday))) 
order by DATE_FORMAT(s.start_timestamp, '%H:%i:%s') , s.type 

私は2つの方法

最初のように試してみました:それらの両方がnullを返す

$results = $connection->execute('select * from schedules as s left join flight_plans as f on s.flight_plan_id = f.id left join drones as d on d.id = s.drone_ref 
where d.uid = "xxx" and is_approved = 1 and is_confirmed = 1 and is_finalized = 1 and 
DATE_FORMAT(s.start_timestamp, \'%Y-%m-%d\') <= DATE_FORMAT(NOW(), \'%Y-%m-%d\') and 
DATE_FORMAT(NOW(), \'%H:%i:%s\') >= DATE_FORMAT(DATE_SUB(start_timestamp,INTERVAL 1 HOUR) , \'%H:%i:%s\')and DATE_FORMAT(NOW(), \'%H:%i:%s\') <= DATE_FORMAT(s.start_timestamp, \'%H:%i:%s\') and ((
s.type = 0 and 
DATE_FORMAT(NOW(), \'%Y-%m-%d\') BETWEEN DATE_FORMAT(s.start_timestamp, \'%Y-%m-%d\') and s.end_timestamp) 
or (
s.end_timestamp IS NULL and 
s.type = 1 and 
(DAYOFWEEK(NOW()) = s.monday or 
DAYOFWEEK(NOW()) = s.tuesday or 
DAYOFWEEK(NOW()) = s.wednesday or 
DAYOFWEEK(NOW()) = s.thursday or 
DAYOFWEEK(NOW()) = s.friday or 
DAYOFWEEK(NOW()) = s.saturday or 
DAYOFWEEK(NOW()) = s.sunday))) 
order by DATE_FORMAT(s.start_timestamp, \'%H:%i:%s\') , s.type')->fetchAll('assoc'); 

$uid = $this->request->data['uid']; 
     $options['joins'] = array(
           array('table' => 'Drones', 
            'alias' => 'd', 
            'type' => 'LEFT', 
            'conditions' => array(
            'Drones.id = Schedules.drone_ref', 
            ) 
          ), 
           array('table' => 'FlightPlans', 
            'alias' => 'f', 
            'type' => 'LEFT', 
            'conditions' => array(
            'FlightPlans.id = Schedules.flight_plan_id', 
            ) 
          ) 
     ); 
     $options['conditions'] = array(
         'AND' => array(
            array('Schedules.drone_ref' => $uid), 
            array('Schedules.is_approved' => 1), 
            array('Schedules.is_confirmed' => 1), 
            array('Schedules.is_finalized' => 1), 
            array('DATE_FORMAT(Schedules.start_timestamp, \'%Y-%m-%d\') <= ' => 'DATE_FORMAT(NOW(), \'%Y-%m-%d\')'), 
            array('DATE_FORMAT(NOW(), \'%H:%i:%s\') >=' => 'DATE_FORMAT(DATE_SUB(Schedules.start_timestamp,INTERVAL 1 HOUR) , \'%H:%i:%s\')'), 
            array('DATE_FORMAT(NOW(), \'%H:%i:%s\') <=' => 'DATE_FORMAT(Schedules.start_timestamp, \'%H:%i:%s\')') 
         ), 
         'AND' => array(
            array(
             'OR' => array(
              'AND' => array(
                array('Schedules.type' => 0), 
                array('DATE_FORMAT(NOW(), \'%Y-%m-%d\') <=' => 'DATE_FORMAT(Schedules.end_timestamp, \'%Y-%m-%d\')') 
                ), 
              'AND' => array(
                array('Schedules.type' => 1), 
                array('Schedules.end_timestamp' => null), 
                 'OR' => array(
                    array('DAYOFWEEK(NOW())' => 'Schedules.monday'), 
                    array('DAYOFWEEK(NOW())' => 'Schedules.tuesday'), 
                    array('DAYOFWEEK(NOW())' => 'Schedules.wednesday'), 
                    array('DAYOFWEEK(NOW())' => 'Schedules.thursday'), 
                    array('DAYOFWEEK(NOW())' => 'Schedules.friday'), 
                    array('DAYOFWEEK(NOW())' => 'Schedules.saturday'), 
                    array('DAYOFWEEK(NOW())' => 'Schedules.sunday') 
                    ) 
                ) 
              ) 
            ) 
     )); 
     $results = $this->Schedules->find('all', $options); 

と第二値、一方、whe n私はphpmy adminで同じSQLクエリを実行します。私は他の結果を得ました!

助けてください!

答えて

0

hasMany belongsToテーブルです。

あなたはそのドキュメンテーション

https://book.cakephp.org/3.0/en/orm/associations.html

、あなたはCakePHPの3生SQLクエリを好む場合は、この前のトピックが役立つかもしれないを参照してください可能性があります。私は2つのクエリを試してみましたが、まだdidnの

CakePHP 3 Raw SQL Query

+0

仕事はありません。私の答えの更新をチェックしてください! –