Laravelで、リレーション先のテーブルの条件で検索するには、大きく分けて2パターンある。
①クエリビルダを使う
②Eloquentを使う
クエリビルダを使う方法は、直感的にわかりやすいが、joinを使ってテーブルを結合してから検索文を書くので、コードが冗長になるので、ここではEloquentを使った書き方のみ書く。
EloquentのwhereHas()を使って、リレーション先で条件検索
index.php
$query = Article::query();
$penname = $request->penname;
$query->with(['profile'])->whereHas('profile', function ($q) use ($penname) {
$q->where('profiles.penname', 'like', '%' . $penname. '%');
});
第一引数にリレーションメソッド名を書き、第二引数にコールバック関数を書く。
コールバック関数内で、条件検索文を書く。
with()は、リレーション先を明示するために必要。