【发布时间】:2013-03-13 05:09:41
【问题描述】:
我有以下表格:
- 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)然后使用包含获取有序列表是否正确?我认为这可行,但我认为还有更简单的方法,对吧?
欢迎任何帮助!谢谢。
【问题讨论】:
-
您需要将
'Menu.active' => '1'添加到您显示的JOIN查询中,然后它会为您提供具有活动菜单的餐厅列表,但是您为什么要将结果分组?跨度> -
是的,没错,我知道。好的,组是错误的词。我想向餐厅展示下面第一个列表中的菜单。现在我得到以下内容:餐厅 1,菜单 1 餐厅 1,菜单 2 餐厅 2,菜单 49 餐厅 2,菜单 22 我想要:餐厅 1,菜单 1,菜单 2 餐厅 2,菜单 49,菜单 22
-
您需要在
Restaurant.id上添加一个ORDER BY子句。 -
实际上,您应该在 ORM 的某处定义一对多关系。我不记得细节了,但是使用 CakePHP 应该是可能的,它应该根据请求返回对象。
-
不,ORDER BY 不能解决问题。我试图在上面写,但新行被删除了。我想要这个方案:restaurant1(menu1,menu2,menu3),restaurant44(menu5,menu8)等。现在我有:restaurant1(menu1),restaurant1(menu2),restaurant1(menu3),restaurant44(menu5),restaurant44(menu8) )。
标签: mysql cakephp join cakephp-2.0 contain