2013-08-24 75 views
1

我有3個表格,restaurants,orders,users。訂單表的字段爲restaurant_idstatususer_id內部連接與容納cakephp

restaurant -> hasMany orders 
orders belogsTo Restaurant 
orders belongsTo users 

我只需要找到那些訂單狀態= 1的餐館,同時需要獲取用戶的信息。

所以,我正在與訂單表內部聯接,

$options['joins'] = array(
    array('table' => 'orders', 
     'alias' => 'Order', 
     'type' => 'INNER', 
     'conditions' => array(
      'Restaurant.id = Order.restaurant_id', 
     ) 
    ) 
); 

但我怎麼能還這個相處用戶的信息,因爲根據蛋糕文檔http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#joining-tables,允許PARAMS這裏有table, alias, type, conditions。有沒有一種方法可以嵌入在最終查詢中獲取用戶信息的sql查詢?是的,另一種方法是編寫自定義查詢,但沒有辦法處理蛋糕。

感謝

更新

在這種情況下,最好的解決辦法是編寫自定義的SQL查詢。

+1

寫你真正想要的SQL查詢,包括。 – Dave

回答

0

你剛剛嘗試了一個額外的加入以獲得用戶?

事情是這樣的:

$this->Restaurant->find('all', array(
    'joins' => array(
     array('table' => 'orders', 
      'alias' => 'Order', 
      'type' => 'INNER', 
      'conditions' => array(
       'Restaurant.id = Order.restaurant_id', 
       'Order.status = 1' 
      ) 
     ), 
     array('table' => 'users', 
      'alias' => 'User', 
      'type' => 'RIGHT', 
      'conditions' => array(
       'Order.user_id = User.id' 
      ) 
    ), 

)); 

注:我通常會發現最簡單的(與您遇到問題搞清楚複雜的查詢)是建立查詢100%的SQL和搞不定你喜歡,然後在CakePHP中重新構建它。

+0

但餐廳沒有與用戶關聯,這項工作是否可以,請讓我試試 – dav

+0

@Davo正確,但是因爲您在第一次連接時加入了訂單表格,您應該可以創建連接(s)關閉它。 – Dave

+0

不起作用,返回空。我以同樣的方式做,所以,在這裏我應該留下與用戶的加入訂單,但是如果我在蛋糕中的條件內寫入該查詢,則會引發錯誤 – dav

0

與狀態1,並與餐廳和用戶信息的訂單列表:

$this->Restaurant->Order->find('all', array('conditions'=>array('Order.status'=>1), 'contain'=>array('Restaurant', 'User'))) 
+0

以及如何通過分頁來執行此操作? –