【发布时间】:2017-10-09 19:16:02
【问题描述】:
我有以下疑问:
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 做到这一点?
【问题讨论】:
标签: laravel laravel-5 eloquent laravel-5.2 laravel-eloquent