例えば記事(articles)とカテゴリ(categories)テーブルがあって以下のようなリレーションになっているとする。
categories articles
id -----┐ id
└----- category_id
status
まず、カテゴリからそのカテゴリに属する全ての記事を取得する場合は、hasMany()で取得できる。
// call側
$articles = $category->articles;
// model側
public function articles()
{
$articles = $this->hasMany(Article::class);
return $articles;
}
statusが1のレコードのみを取得したい場合は、hasMany()にwhere句を追加すればよい。
public function articles()
{
$articles = $this->hasMany(Article::class)->where('status', '=', 1);
return $articles;
}
動的にstatusの値を指定して取得する場合は、パラメータで渡してhasMany()にwhere句を追加すればよい。
// call側
$articles = $category->articles($status);
// model側
public function articles($status)
{
$articles = $this->hasMany(Article::class)->where('status', '=', $status);
return $articles;
}
または、hasMany()には手を加えず、コール元でwhere句を追加してもよい。
// call側
$articles = $category->articles->where('status', '=', $status);
// model側
public function articles()
{
$articles = $this->hasMany(Article::class);
return $articles;
}