[英]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.