【问题标题】:Laravel Eloquent - Eager Loading Query is Being Restricted by limit()Laravel Eloquent - 急切的加载查询受到 limit() 的限制
【发布时间】: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


    【解决方案1】:

    你可以使用eloquent的join

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

    with 仅在您想在 MyTable 上急切加载关系时使用。

    【讨论】:

      猜你喜欢
      • 2016-08-17
      • 1970-01-01
      • 2021-10-02
      • 2016-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2018-03-29
      相关资源
      最近更新 更多