php - 真的没有办法在 with() 方法中执行 limit() 吗?(雄辩)
问题描述
Mode
模型与模型有hasMany
关系DataSet
。我想用with()
-method 加载数据集。它工作正常,除非我需要对DataSet
per进行限制Mode
。以下代码无法按预期工作。它将DataSet
结果限制在一起,而不是单独限制Mode
。
$modes = $modes->with(['dataSets' => function ($query) use ($user, $count) {
// Select data sets of user from each mode
$query->join('data_set_user', 'id', '=', 'data_set_id')
->where('user_id', $user->id);
if(isset($count))
$query->limit($count);
}])->orderBy('order_value')
->get();
看看这段代码产生的查询:
SELECT * FROM `data_sets` INNER JOIN `data_set_user` on `id` = `data_set_id` where `data_sets`.`mode_id` in (?, ?, ?) and `user_id` = ? limit 5"
是否有任何 Laravel 方式可以单独为每种模式设置限制?
解决方案
任何 Laravel 方法都不可能。
这是一个超级困难的问题,一些 SQL 有足够的方法来解决它,而另一些则没有。
该问题已多次提出:
最值得注意的是(最近也是):
推荐阅读
- python - 需要显示最高价格和拥有它的公司
- excel - 如何从 Excel 宏中创建 Word 段落格式对象
- deep-learning - 在 pytorch 中可视化张量(视频)
- javascript - 抓取 m3u8 文件的路径
- python - Django:cleanse_setting 中的无限循环
- windows - 如何将文件夹中的每个 X 子文件夹压缩为单独的 rar 文件
- excel - 使用“分页”更改网站页面的宏
- python - 如何获取json文件中特定低级键的最高值的顶级键?
- python - np.polyfit 不适合数据
- javascript - 仅当其他类处于活动状态时才删除具有特定类的元素