getAttributeはmodelで取得したエイリアスのカラムも利用できる

WEB開発
この記事は約2分で読めます。
スポンサーリンク
$menu_list = Menu::leftJoin('company_menu', function ($q) {
          $q->on('menus.id', '=', 'company_menu.menu_id')
            ->where('company_id', $this->_company->id);
        })
          ->select('id')
          ->selectRaw('(CASE WHEN is_enabled IS NULL THEN 1 ELSE is_enabled END) AS is_enabled,
    (CASE WHEN company_menu.title IS NULL THEN menus.title ELSE company_menu.title END) AS title,
    (CASE WHEN company_menu.title IS NULL THEN 0 ELSE 1 END) AS is_title')
          ->get()


こちらはmenuテーブルにcompany_menuテーブルをleftjoinしてカラムを別名で作ったものです。

取得できるカラムデータは以下
id,is_enabled,title,is_title

このうち、is_titleはどのDBカラムにも存在しないものですが、getAttributeの中で利用することができます。

//MenuのEloquentModel 
   public function getTitleAttribute($title)
    {
        return $this->is_title ? $title : __($title);
    }


このようにエイリアスを利用しつつgetAttributeを利用することで、bladeで条件判定をする必要なく、柔軟に利用することが可能。

コメント

タイトルとURLをコピーしました