laravel で with を使って関連モデルを読み込んだとき、
limit , take で取得数を制限したい場合がある
しかし、普通にやっても動かないので、
を使おう
インストール
composer require staudenmeir/eloquent-eager-limit:"^1.0"
database.php
//以下の箇所をすべて false に変更
'strict' => false,
キャッシュを消して有効に
php artisan config:clear
php artisan config:cache
使い方
Autotweet -> Social -> Answer
って感じで関連付けしたとき、
Answerを3件だけ取得したい
Social.php
class Social extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
public function answer()
{
return $this->hasMany('App\Answer');
}
Answer.php
class Answer extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
こんな感じ
使い方は
HogeController.php
$tweet = Autotweet::query()//単数形 User
->with([
'social' => function ($q) {
$q->with(
[
'answer' => function ($q2) {
$q2->orderBy('id','DESC')->take(3);//3件のみ取得
},
]
);
},
])
->get();
で使えます。
注意点
・database.php の strict を変更すること
・関連付けするモデル(この場合はSocial.phpとAnswer.php)両方に
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
を設定することが大事