1対1のリレーションに有効です。
1対多のリレーションの場合は Slow Query になる可能性があるようです。必ず生成されるSQL文を確認しましょう。
/**
* 1対1リレーション (従属の関係)
*
* @return \Illuminate\Database\Eloquent\Relations\BelongsTo
*/
public function user() // 単数形
{
return $this->belongsTo('App\User');
}
(モデルの中に記述してもいいです。お好みで。)
whereHasメソッド または orWhereHasメソッド を使用します。
// ● リレーション先のユーザー名「太郎」でも検索
$q = '太郎';
$model->orWhereHas('user', function ($query) use ($q) { // リレーション名 user を渡す
$query->where('name', 'LIKE', "%{$q}%");
});
WHERE
exists(select * from users
where articles.user_id = users.id
and name LIKE '%太郎%')
exists を使ってサブクエリを呼び出します。
パッケージのインストール
composer require mpyw/eloquent-has-by-join
composer require mpyw/eloquent-has-by-non-dependent-subquery