[英]How can I do sql union in cake php?
我必須獲取該模型的所有關聯數據。 基本上,UNION查詢如下:
SELECT * FROM `videos` AS `U1`
WHERE `U1`.`level_id` = '1' AND `U1`.`submitted_date` > '2011-09-11'
UNION
SELECT * FROM `videos` AS `U2`
WHERE `U2`.`level_id` = '1' AND `U2`.`submitted_date` < '2011-09-11'
ORDER BY submitted_date DESC
LIMIT 0,10
因此,當我使用$this->Video->find('all')-->
我得到了關聯表數據的所有結果。
現在我想使用UNION SQL查詢,它也應該返回關聯的表數據...
有什么想法如何使用Cake內置函數獲取數據嗎?
您可以通過4種或更多種不同的方式進行此操作...最簡單但不推薦的方法是使用
$this->Model->query($query);
其中$query
是上述查詢。
第二種方法(但可能不是您想要的)是重做sql查詢,您將獲得相同的結果(但不與別名分開),如下所示:
SELECT * FROM `videos` AS `U1`
WHERE `U1`.`level_id` = '1' AND (`U1`.`submitted_date` > '2011-09-11' OR `U1`.`submitted_date` < '2011-09-11')
ORDER BY submitted_date DESC
LIMIT 0,10
這樣的查詢可以很容易地找到
$conditions = array(
'Video.level_id'=>1,
'OR' => array(
'Video.submitted_date <'=> '2011-09-11',
'Video.submitted_date >'=> '2011-09-11'
)
);
$this->Video->find('all', array('conditions'=>$conditions))
第三種方式將是Abba Bryant談論的方式,這里將詳細介紹直接在CakePhp中直接構建語句的Union語法 。
第四種方式將減少第一種方式,您將必須創建一個具有beforeFind函數的行為,然后在其中必須檢查選項聯合是否創建並創建查詢或創建類似於第三種選項的行為。
你會用這樣的發現來稱呼它
$this->Video->find('all', array('conditions'=>$conditions, 'union'=> $union));
這將更像可鏈接或可容納行為。
合適的方法是修改您的cakephp sql驅動程序...這個,我真的不知道您要做的更改,但這是一種實現方法...該驅動程序負責解釋和創建查詢,連接到數據庫並執行查詢...
記住cakephp查找需要做必要的檢查以防止SQLInyection和其他風險... $model->query
不會執行此測試,所以要小心
這里的問題使用聯接和某些直接數據源訪問來構建可通過find方法使用的聯合查詢。
這需要一些工作,並且該代碼不適用於您的100%的代碼-您將不得不對其進行修改-但它應該可以幫助您入門。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.