laravel - 当我使用限制或接受 whereIn 时,laravel eger 加载无法正常工作
问题描述
$all_5_post = wp_terms::with(['wp_posts' => function ($query) {
$query->orderBy('id', 'desc')->take(5);
}])->whereIn('id',[3,4,6,9])->get();
获取 3 id 中的关系数据,但 4、6、9 关系数据变空,但是当我只使用 WHERE eloquent 并对相同的 3、4、6、9 id 进行多次查询时,它在每个 id 中显示 5 个关系表数据我必须做什么现在我需要一个解决方案。
解决方案
就像 lagbox 在他的评论中所说的那样,'take' 语句将为所有查询结果使用五个而不是每个结果五个......
为了解决这个问题,你可以使用eloquent-eager-limit
首先:安装它:
composer require staudenmeir/eloquent-eager-limit:"^1.0"
第二:在您的模型中使用它,例如:
1-in 主类模型:
class wp_terms extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
.....
}
2-在子类模型中:
class wp_posts extends Model
{
use \Staudenmeir\EloquentEagerLimit\HasEagerLimit;
}
现在你可以写:
$all_5_post = wp_terms::with(['wp_posts' => function ($query) {
$query->orderBy('id', 'desc')->limit(5);
}])->whereIn('id',[3,4,6,9])->get();
你应该得到你期望的结果......
记住:使用“限制”而不是“采取”
推荐阅读
- json - Pyspark - 从目录中的每个文件中读取 JSON 并将其放入自己的数据框中
- ios - 在屏幕顶部使用 .horizontal ScrollArea?
- php - 使用 ZipArchive 更改 docx 标头变量
- r - R 规则项目频率图旋转轴标签
- amazon-web-services - AWS Glue Spark ETL 写入 S3 不会触发 S3 事件
- xml - 从 XML 文档中选择一个值
- r - 根据一列中的完全匹配合并两个数据框,并在 R 中的另一列中的错误内匹配
- c - “在进程之间传递文件描述符”如何工作?
- typescript-compiler-api - Typescript编译器,如何获取符号的类型?
- c# - "is" 运算符后花括号的含义