真的没有办法在with()方法中执行limit()吗? (雄辩)

时间:2019-03-06 23:32:28

标签: php laravel laravel-5

Mode模型与hasMany模型具有DataSet关系。我想使用with()方法加载数据集。除非我需要对每个DataSet限制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方法使限制分别适用于每种模式?

1 个答案:

答案 0 :(得分:2)

使用任何Laravel方法都是不可能的。

有些SQL有足够的方法来解决它,但是其他的没有,这是一个非常困难的问题。

问题已经多次提出:

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