LoginSignup
1
0

More than 3 years have passed since last update.

laravel with で limit take

Posted at

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;
を設定することが大事

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0