提问者:小点点

Laravel Eloquent-急切加载查询受到限制()


我有以下疑问:

MyTable::where('my_column', '=', 25)->with('myOtherTable')
                                    ->orderBy('id', DESC)->limit(5);

我想以上给我带来类似于以下原始SQL查询的结果:

SELECT *
FROM myTable AS ABB1 
    LEFT JOIN myOtherTable AS ABB2 ON ABB1.id = ABB2.myTable_id
WHERE my_column = 25
ORDER BY myTable.id DESC
LIMIT 5;

以上内容将在myTable中找到所有内容以及myOtherTable中的相应信息,然后将结果限制为5行。

当我运行上面雄辩的语句时,将处理两个SQL查询。第一个看起来像:

SELECT * 
FROM myTable
WHERE my_column = 25
ORDER BY id DESC;

如果此查询返回7个结果项,但我将较小的数字传递到limit()函数(即limit(5)),则相应的即时加载查询将如下所示:

SELECT *
FROM myOtherTable
WHERE id IN(1, 2, 3, 4, 5);

急切加载查询本身仅限于5项。这里应该没有限制。上面的IN条件中的项数应该是7(或者从第一个查询返回的计数)。该限制仅应在第二个查询运行后应用。

我要如何才能做到这一点?


共1个答案

匿名用户

你可以使用雄辩的join

MyTable::join('myOtherTable', 'column_id', '=', 'id')
    ->where('my_column', '=', 25)
    ->with('myOtherTable')
    ->orderBy('id', DESC)
    ->limit(5);

只有当您想在MyTable上加载关系时,才可以使用