我有以下查询:
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做到这一点?
答案 0 :(得分:0)
您可以使用雄辩的join
。
MyTable::join('myOtherTable', 'column_id', '=', 'id')
->where('my_column', '=', 25)
->with('myOtherTable')
->orderBy('id', DESC)
->limit(5);
with
仅在您希望加载MyTable
上的关系时才会显示。