簡體   English   中英

CakePHP SQL查詢

[英]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"字段(假設模型名稱是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數組捆綁在一起。

現在,我為我的關注找到了簡單,干凈的解決方案! 是的

首先,我必須取消綁定的綁定,然后我必須對該條件進行新的綁定。 它像一種魅力。 這是代碼:

        $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM