簡體   English   中英

Yii2模型ViaTable

[英]Yii2 Model ViaTable

為了簡單起見,假設我有3個表: menupage和一個聯結表menu_page

因此,如果我想獲取“主頁”頁面可用的所有菜單,則在模型中我定義了一個關系:

public function getAllMenus() {
    return $this->hasMany(Menu::className(), ['id' => 'menu_id'])->viaTable(PageMenu::tableName(), ['page_id' => 'id']);
}

但是現在我們在菜單表中添加了一個名為show_all_pages的屬性,如果將此屬性設置為1,則應該返回菜單,如果沒有,我們應該檢查菜單是否啟用了可在家庭使用。

有沒有辦法在這里添加此條件?

您可以使用的andWhere條款適用於該過濾器show_all_pages

public function getAllMenus() {
    return $this->hasMany(Menu::className(), ['id' => 'menu_id'])
                ->viaTable(PageMenu::tableName(), ['page_id' => 'id'])
                ->andWhere(['show_all_pages' => 1]);
}

到目前為止,我發現的解決方案是分離活動查詢並進行聯合:

public function getSelectedMenus() {

        return $this->hasMany(Menu::className(), ['id' => 'menu_id'])->viaTable(PageMenu::tableName(), ['page_id' => 'id'])->onCondition(['menu.active' => Page::ACTIVE]);
    }

    public function getAllMenus() {
        return Menu::find()->where(['active' => Page::ACTIVE, 'show_all_pages' => 1]);
    }

    public function getMenus() {

        $selectedMenus = $this->getSelectedMenus();
        $allMenus = $this->getAllMenus();

        return $selectedMenus->union($allMenus);

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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