首页 > 解决方案 > 真的没有办法在 with() 方法中执行 limit() 吗?(雄辩)

问题描述

Mode模型与模型有hasMany关系DataSet。我想用with()-method 加载数据集。它工作正常,除非我需要对DataSetper进行限制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 方式可以单独为每种模式设置限制?

标签: phplaravellaravel-5

解决方案


任何 Laravel 方法都不可能。

这是一个超级困难的问题,一些 SQL 有足够的方法来解决它,而另一些则没有。

该问题已多次提出:

最值得注意的是(最近也是):


推荐阅读