php - 如何从每个父模型的模型中获取 N 条记录?在 Laravel Eloquent 中

标签 php mysql laravel laravel-5 eloquent

如何在 laravel eloquent 中从每个父模型的模型中获取 n 条记录。

例如,假设我有产品表和类别表。我想要一个名称以 A 开头的所有产品的列表,但每个类别 的产品不超过 10 个。

我的表结构是这样的。

产品表

---------------------------------
id  | title | slug | category_id
----------------------------------

类别表

--------------
id  | title |
--------------

我尝试遵循这个例子,这正是我想要的 https://softonsofa.com/tweaking-eloquent-relations-how-to-get-n-related-models-per-parent/

但是当我在我的 product model 中添加范围后尝试像链接中的示例一样进行查询时。它抛出并显示 sql 错误。

SQLSTATE[HY000]: General error: 1267 Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation '=' (SQL: select count(*) as aggregate from...

任何人都可以告诉我如何获得每个相关模型的 n 个结果或者如何修复此错误。

最佳答案

Laravel 中没有对此的原生支持。

我为它创建了一个包:https://github.com/staudenmeir/eloquent-eager-limit

在父模型和相关模型中使用 HasEagerLimit 特征。

class Category extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

class Product extends Model {
    use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}

然后您可以将 limit()/take() 应用于您的关系:

Category::with(['products' => function($query) {
    $query->where('name', 'LIKE', 'A%')->limit(10);
}])->get();

关于php - 如何从每个父模型的模型中获取 N 条记录?在 Laravel Eloquent 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50761712/

相关文章:

php - 使用PHPSpec时如何使用类接口(interface)

php - Laravel 单例无法跨 Controller /ViewComposer 工作

javascript - 从选定的下拉列表中将值附加到文本区域而不删除以前的值

mysql - 如何在没有 Web 服务的情况下将 Xamarin.Forms 应用程序连接到 mysql 数据库

laravel - 如何在 Laravel 中将 orderBy() 与模型方法一起使用

php - 使用 laravel 进行异步评分(喜欢/不喜欢)

php - 为什么我的调试数据未格式化?

php - 新手问题: PDO and MYSQL INSERT Query problem

mysql - 为证券交易所构建数据库的最佳方法是什么?

PHP PDO MySQL 隧道连接双端口