我有以下表格:
- 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
)
);
这不起作用因为所有餐馆都会被列出 . 我想只有餐厅有活跃的菜单 .
下一个想法:使用join
$options['joins'] = array(
array('table' => 'menus',
'alias' => 'Menu',
'type' => 'RIGHT',
'conditions' => array(
'Menu.restaurant_id = Restaurant.id',
)
)
);
不好,因为,我没有我想要的有序列表 . 我需要按餐厅分组的菜单 . 看看上面 .
这是与餐馆和菜单(active = true)进行连接然后使用包含获取有序列表的正确方法吗?我认为这可行,但我认为还有一种更简单的方法,对吧?
欢迎任何帮助!谢谢 .
2 回答
如果您使用CakePHP的ORM机器,您应该有一个餐厅模型和一个菜单模型来描述每个表 . 在餐厅模型中,您应该有一个
$hasMany = "Menu"
字段,并在菜单中有一个$belongsTo = "Restaurant"
字段(假设模型名称是Menu
和Restaurant
) .从那时起,使用ORM进行查询非常简单:
上面的
Restaurant
控制器的ad-hoc方法应该将行检索为Restaurant
对象的数组,每个对象都捆绑一个活动Menu
数组 .现在我找到了一个简单而干净的解决方案供我关注!是啊!
首先,我必须取消绑定绑定,然后我不得不对条件进行新的绑定 . 它就像一个魅力 . 这是代码:
谢谢大家的回答!