[英]CakePHP sql-query
我有以下表格:
- restaurants (restaurant.id, restaurant.name)
- menus (menu.id, menu.name, menu.active, menu.restaurant_id)
我想列出所有帶有活動菜單的餐廳(menu.active = true):
- restaurant2
- menu1
- menu4
- restaurant5
-menu3
- restaurant19
- menu34
- menu33
我的第一個想法是這樣的:
$options['contain'] = array(
'Menu' => array(
'conditions' => $menuParams //array('Menu.active' => '1') //$menuParams
)
);
由於所有餐廳都將列出,因此此方法無效。 我只希望餐廳的菜單有效。
下一個想法:使用聯接
$options['joins'] = array(
array('table' => 'menus',
'alias' => 'Menu',
'type' => 'RIGHT',
'conditions' => array(
'Menu.restaurant_id = Restaurant.id',
)
)
);
不好,因為我沒有想要的訂購清單。 我需要按餐廳分組的菜單。 看上面。
這是加入餐廳和菜單(active = true),然后使用contains獲取有序列表的正確方法嗎? 我認為這可行,但我認為還有更簡單的方法,對嗎?
歡迎任何幫助! 謝謝。
如果您使用的是CakePHP的ORM機制,則應該有一個餐廳模型和一個菜單模型來描述每個表。 在餐廳模型中,應該有一個$hasMany = "Menu"
字段,在菜單中應該有一個$hasMany = "Menu"
$belongsTo = "Restaurant"
字段(假設模型名稱是Menu
和Restaurant
)。
從這一點出發,使用ORM進行查詢非常簡單:
$this->Restaurant->recursive = 1; // grab the menus
$conditions = array('Menu.active' => '1'); // restrict to active menus only
$this->Restaurant->find('all', array('conditions' => $conditions));
Restaurant
控制器的ad-hoc方法中的上述內容應將這些行檢索為Restaurant
對象的數組,每個對象都與一個活動Menu
數組捆綁在一起。
現在,我為我的關注找到了簡單,干凈的解決方案! 是的
首先,我必須取消綁定的綁定,然后我必須對該條件進行新的綁定。 它像一種魅力。 這是代碼:
$this->unbindModel(array('hasMany' => array('Menu')));
$this->bindModel(array('hasMany'=>array(
'Menu'=>array(
'foreignKey' => 'restaurant_id',
'conditions' => array(
'Menu.active' => 1
)
)
)));
我感謝大家的回答!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.