首页 文章

CakePHP sql-query

提问于
浏览
0

我有以下表格:

- 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 回答

  • 0

    如果您使用CakePHP的ORM机器,您应该有一个餐厅模型和一个菜单模型来描述每个表 . 在餐厅模型中,您应该有一个 $hasMany = "Menu" 字段,并在菜单中有一个 $belongsTo = "Restaurant" 字段(假设模型名称是 MenuRestaurant ) .

    从那时起,使用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 数组 .

  • 0

    现在我找到了一个简单而干净的解决方案供我关注!是啊!

    首先,我必须取消绑定绑定,然后我不得不对条件进行新的绑定 . 它就像一个魅力 . 这是代码:

    $this->unbindModel(array('hasMany' => array('Menu')));
            $this->bindModel(array('hasMany'=>array(
                'Menu'=>array(
                    'foreignKey' => 'restaurant_id',
                    'conditions' => array(
                                        'Menu.active' => 1
                                        )
                )
            )));
    

    谢谢大家的回答!

相关问题