我有以下疑问:
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(或者从第一个查询返回的计数)。该限制仅应在第二个查询运行后应用。
我要如何才能做到这一点?
你可以使用雄辩的join
。
MyTable::join('myOtherTable', 'column_id', '=', 'id')
->where('my_column', '=', 25)
->with('myOtherTable')
->orderBy('id', DESC)
->limit(5);
只有当您想在MyTable
上加载关系时,才可以使用。