【问题标题】:Laravel LIMIT relation using EloquentLaravel 使用 Eloquent 限制关系
【发布时间】:2015-01-03 00:19:11
【问题描述】:

我有一堆 Shops 和 Items 。每个商店可以有许多不同的物品。但是,我想获得所有商店,每个商店只有 4 件商品。

以下为我提供了所有商店及其所有物品:

$shops = Shop::with('items')->get();

以下为我提供了所有商店,但只有总共 4 件商品,而不是每件。

$shops = Shop::with(array('items' => function($query) {
    $query->take(4);
}))->get();

如何获得所有商店,每个商店有 4 件商品?

【问题讨论】:

  • 澄清一下,您想获取所有恰好有四件商品的商店吗?
  • 我要获取所有店铺,每个店铺最多4件商品
  • 您可以查看stackoverflow.com/questions/26544839/…并评论问题
  • 这个问题最终会导致这个页面似乎有你的答案,虽然它有点令人困惑并且只适用于 MySQL。 softonsofa.com/…

标签: php sql laravel eloquent


【解决方案1】:
Shop::with(array('items' => function($query) {
    $query->limit(4);
}))->get();

将 take 替换为 limit 应该可以解决您的问题。

【讨论】:

    【解决方案2】:

    这是由于 SQL 限制造成的。 当急切加载某些东西时,laravel 会生成一个看起来像这样的 SQL 查询

    SELECT * FROM xyz WHERE id IN (1, 2...) LIMIT 4;
    

    所以 SQL 引擎只返回 4 行。

    我在 laravel 中找不到快速解决方法。即使在原始 SQL 中,这也是一个难以解决的问题。

    关于这个主题的一些阅读How to select the first/least/max row per group in sql

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2016-08-13
      • 2018-02-09
      • 2020-10-14
      • 1970-01-01
      相关资源
      最近更新 更多