2012-07-06 43 views
1

我的發現查詢是這樣的;CakePHP複雜查找條件使用'和','或'條款

//here $u_id is id of the users table retrieved using session variable 

$this->User->Request->find("all",array("conditions" =>array("request.status" => "friends" , 
"OR" => array("request.friend_id" => "$u_id","request.user_id" => "$u_id")))); 

等價的SQL查詢是: -

SELECT `Request`.`id`, `Request`.`user_id`, `Request`.`friend_id`, `Request`.`status`, `User`.`id`, `User`.`name`, `User`.`email`, `User`.`password`, 
FROM 
`myblog`.`requests` AS `Request` JOIN `myblog`.`users` AS `User` 
ON 
(`Request`.`friend_id` = `User`.`id`) 
WHERE 
((`request`.`friend_id` = 3) OR (`request`.`user_id` = 3)) AND `request`.`status` = 'friends' 

而我希望以後在上面的SQL查詢來獲得期望的結果 'ON' 下面一行:

`Request`.`user_id` = `User`.`id` OR `Request`.`friend_id` = `User`.`id` 

什麼我應該在find()方法中做出更改, 還是應該更改我的模型?

我的表是:

用戶(ID,姓名,密碼,電子郵件)
請求(ID,user_ID的用戶表(ID),
friend_id(用戶表的ID),狀態)

回答

0

您可以在模型中指定條件。

public $belongsTo = array('User' => array('className' => 'Request', 
              'foreignKey' => 'user_id', 
              'conditions' => array('OR' => array('Request.user_id' => 'User.id', 'Request.friend_id' => 'User.id') 
             )) 
         ); 
+0

我確實做到了,你告訴我,但這一次我收到後,下面的「ON」在SQL查詢: - ('Request'.'friend_id' ='User'.'id' AND(('Request'.'user_id' ='User.id')OR('Request'.'friend_id' ='User.id'))) – 2012-07-06 07:36:40

+0

我正在將這種情況提交給我的機器。在意味着你可以參考以下鏈接:http://book.cakephp.org/1.3/view/1047/Joining-tables – 2012-07-06 07:40:11

+0

好吧先生我在等待積極的迴應 Thanx很多 – 2012-07-06 07:55:37