🤠
[Laravel] withとwhereHasを組み合わせて使う
LaravelでwithとwhereHasを同時に使いたいと思い調べてみる、と公式ドキュメントに載ってました。備忘がてら公式ドキュメントの内容をもとに、使い方を書いていきます。
早速公式ドキュメントを見たい人はこちらです。
場面
以下のようなリレーションが組まれた2つのテーブルがあるとします。
"postsテーブルのfeatureカラムがTRUEのデータを持つuserを取得したい" かつ "userを取得するときは紐づくpostも取得したい" という状況だとします(黄色塗りのデータを取得したい)。
whereHasだけだと前者しかできない。。
以下、公式ドキュメントの例を引用してます。model部分です。
class User extends Model
{
// UsersとPostsの関係
public function posts()
{
return $this->hasMany('App\Eloquent\Post');
}
}
class Post extends Model
{
public function user()
{
return $this->belongsTo('App\Eloquent\User');
}
}
取得方法
結論、withWhereHasメソッドを使えばOKです。
こんな短く書けるなんて便利!
以下、公式ドキュメントの例を引用してます。controller部分です。
use App\Models\User;
$users = User::withWhereHas('posts', function ($query) {
$query->where('featured', true);
})->get();
参考
Discussion