php - 如何在 laravel 中的 with() 方法之后限制查询
问题描述
我有 2 个模型。PostModel 和 CategoriesModel。
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();
但是这段代码是错误的。它适用于所有记录。但事实是,此查询适用于每个类别。请帮助我。谢谢
解决方案
有一个专门用于此的 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();
推荐阅读
- python - 使用 colorama 在 Windows 10 终端窗口中定位光标
- swiftui - 如何对 ObservableObject 类进行绑定计算属性更新?
- reactjs - Jest with Apollo Client - 在 React hooks 上下文中调用 useQuery 来测试 React App
- java - spring mvc json数组值转换为“
- maven - 通过 Jenkins 管道构建 Maven 所需的时间是平时的 4 倍
- ruby-on-rails - 在 RubyOnRails 项目中通过唯一电子邮件创建 PostgreSQL 记录
- plsql - 在 Oracle apex for twilio 中使用 RESTful 服务
- python - 如何使用 xarray 重采样将月度数据下采样为年度数据?
- java - 如何在 Jackson 中为包含泛型类型的 List 创建自定义反序列化器?
- angular - 从 ReactiveForms 收集数据的问题