亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在laravel中的with()方法之后限制查詢

如何在laravel中的with()方法之后限制查詢

PHP
喵喵時光機 2023-08-26 17:34:21
我有 2 個型號。帖子模型和類別模型。class PostModel extends Model{    protected $table='posts';    protected $primaryKey = 'id';    protected $guarded=['id'];    public function categories()    {        return $this->belongsTo(CategoriesModel::class);    }}class CategoriesModelextends Model{    protected $table='categories';    protected $primaryKey = 'id';    protected $guarded=['id'];    public function posts()    {        return $this->hasMany(PostModel::class);    }}我想獲得 6 個類別和 10 個帖子。我在我的控制器中使用了這段代碼$categories = CategoriesModel::with(['pages' => function($query) {        $query->limit('10');    }])->take("6")->get();但這段代碼是錯誤的。它適用于所有記錄。但事實是此查詢適用于每個類別。請幫助我,謝謝
查看完整描述

4 回答

?
暮色呼如

TA貢獻1853條經驗 獲得超9個贊

有一個專門處理此問題的 Laravel 包,稱為Eloquent Eager Limit:

安裝后:

composer?require?staudenmeir/eloquent-eager-limit:"^1.0"

您應該在應用有限預加載的模型中使用它:

class PostModel extends Model

{

use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;

?// ........

}


class CategoriesModel

extends Model

{


use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;

?// ........

}

現在這個查詢將得到你想要的結果:


$categories = CategoriesModel::with(['pages' => function($query) {

? ? ? ? $query->limit('10');

? ? }])->take("6")->get();


查看完整回答
反對 回復 2023-08-26
?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

對于急切加載,您可以使用地圖操作執行以下操作:


$categories = CategoriesModel::with('pages')->take(6)->get()

  ->map(function($q)

    { $q->pages = $q->pages->take(10); // take only 10 query

      return $q; 

    }

);

上述方法之所以必要,是因為受約束的預加載查詢大致可轉換為 SQL,如下所示:


查詢選擇類別:


select * from `categories`

limit 6;

查詢以獲取關系


select * from `categories`

inner join `posts` on `categories`.`id` = `posts`.`category_id`

where `posts`.`category_id` in (id's from categories query)

limit 10;


查看完整回答
反對 回復 2023-08-26
?
夢里花落0921

TA貢獻1772條經驗 獲得超6個贊

首先,您的控制器中的關系名稱是錯誤的。通過以下代碼更新您的類別模型:


public function ten_posts()

{

  return $this->hasMany(PostModel::class)->take(10);

}

然后使用以下代碼更新您的控制器:


$categories = CategoriesModel::with('ten_posts')->take(6)->get();


查看完整回答
反對 回復 2023-08-26
?
DIEA

TA貢獻1820條經驗 獲得超2個贊

嘗試這樣 -


$categories = CategoriesModel::with(['pages' => function($query) {

        $query->take('10');

    }])->take("6")->get();


查看完整回答
反對 回復 2023-08-26
  • 4 回答
  • 0 關注
  • 292 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號