人気のPHP WEBアプリケーションフレームワークLaravelのTipsを記録していきます

● Laravel の 1対多 リレーション

● Laravel全リレーション

1対1
1対多
多対多
Has Many Through
1対1(ポリモーフィック)
1対多(ポリモーフィック)
多対多(ポリモーフィック)

これらのうち 1対多 リレーションを操作してみます。

● Laravel の 1対多リレーション(hasMany)

親から子を呼び出すイメージが hasMany です。

    /**
     * ● 1対多リレーション : ->items でショップ内の商品を取得します
     *
     * ソート順 : sort_no , ASC
     *
     */
    public function items()
    {
        return $this->hasMany('App\Item','shop_id')->orderBy('sort_no','ASC');
    }

● 使用方法

->items で取得できます

dump( $user->items );

● Laravel の 1対多リレーション(hasMany)に検索条件( where )をつける

後ろの where() メソッドを追加することで条件をつけることができます。

    /**
     * ● 1対多リレーション : ->items_active でショップ内のアクティブな商品を取得します
     *
     * ソート順 : sort_no , DESC
     *
     */
    public function items_active()
    {
        return $this->hasMany('App\Item','shop_id')->where('is_active','=',1)->orderBy('sort_no','ASC');
    }

● Laravel の 1対多リレーション(hasMany)

逆に子から親を呼び出すイメージが belongsTo です。

    /**
     * ● 1対多リレーション(belongsTo): ->shop で商品が所属するショップを取得します
     *
     * 1件のみ取得のためソートなし
     *
     */
    public function shop()
    {
        return $this->belongsTo('App\Shop');
    }

● リレーション先の id = 10 を持つデータを検索する場合

whereHas を使用します。(スロークエリとなるので注意) こちらで回避します。
https://qiita.com/mpyw/items/0761a5e44836c9bebcd5

                $model->whereHas('actcategories', function($query) use ($q){
                    $query->where('actcategories.id', '=', $q['actcategory']);
                });
No.1484
03/26 18:16

edit