2017-03-16 44 views
1

我想從table allowances檢索行,其中當前日期存在於兩個字段date_from和date_to之間。 這裏是SQL查詢:在cakephp中的語句之間的mysql

SELECT * FROM `allowances` WHERE desg_id=4 AND CURDATE() between date_from and date_to 

現在怎麼寫cakephp2發現這個查詢。我想這一點:

$allowance = $this-> Allowance->find('all',array(
'conditions'=>array(
'? BETWEEN ? AND ?'=>array(date('Y-m-d'), 'Allowance.date_from', 'Allowance.date_to') 
))); 

我得到的SQL輸出:

SELECT `Allowance`.`id`, `Allowance`.`date_from`, `Allowance`.`date_to`, FROM `db_demo`.`allowances` WHERE '2017-03-16' BETWEEN 'Allowance.date_from' AND 'Allowance.date_to' 

這裏是引號的問題。 不幸的是,它不工作。這個查詢有什麼問題。

+0

你的'date_from'和'date_to'字段類型是'datetime'還是'date'? – Mustafa

+0

可能的重複http://stackoverflow.com/questions/26430259/cakephp-3-0-between-find-condition – Mustafa

+0

字段類型日期 –

回答

1

你可以試試這個方法:

$this->Order->find('all', array(
    'conditions' => array(
     'id' => $id, 
     'created >=' => $start_date, 
     'created <=' => $end_date . ' 23:59:59', 
     'my_field LIKE' => '%whatever%' 
)); 
+0

這是什麼? –

1

不能綁定標識符的方式,作爲約束字符串結束的字符串常量,如可在生成的查詢中可以看出。無論是在SQL片段添加標識符的條件的左側:

'? BETWEEN Allowance.date_from AND Allowance.date_to' => date('Y-m-d') 

或使用表達式(這是不是真的值得冒這個險雖然):

$dataSource = $this->Allowance->getDataSource(); 

// ... 

'? BETWEEN ? AND ?' => array(
    date('Y-m-d'), 
    // note that using expressions is unsafe for user input! 
    $dataSource->expression('Allowance.date_from'), 
    $dataSource->expression('Allowance.date_to') 
) 

參見