1対1
1対多
多対多
Has Many Through
1対1(ポリモーフィック)
1対多(ポリモーフィック)
多対多(ポリモーフィック)
これらのうち 1対多 リレーションを操作してみます。
親から子を呼び出すイメージが hasMany です。
/**
* ● 1対多リレーション : ->items でショップ内の商品を取得します
*
* ソート順 : sort_no , ASC
*
*/
public function items()
{
return $this->hasMany('App\Item','shop_id')->orderBy('sort_no','ASC');
}
->items で取得できます
dump( $user->items );
後ろの 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');
}
逆に子から親を呼び出すイメージが belongsTo です。
/**
* ● 1対多リレーション(belongsTo): ->shop で商品が所属するショップを取得します
*
* 1件のみ取得のためソートなし
*
*/
public function shop()
{
return $this->belongsTo('App\Shop');
}
whereHas を使用します。(スロークエリとなるので注意)
こちらで回避します。
https://qiita.com/mpyw/items/0761a5e44836c9bebcd5
$model->whereHas('actcategories', function($query) use ($q){
$query->where('actcategories.id', '=', $q['actcategory']);
});