Laravel Eloquent - 极度加载查询受限制()受限制

时间:2017-05-10 23:49:47

标签: laravel laravel-5 eloquent laravel-5.2 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行。

当我运行上面的eloquent语句时,会处理两个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(或者从第一个查询返回的计数为止)。该限制应仅在第二个查询运行后应用。

我如何用Eloquent做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以使用雄辩的join

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

with仅在您希望加载MyTable上的关系时才会显示。