【问题标题】:Eloquent query distinct sub id雄辩的查询不同的子ID
【发布时间】:2021-04-19 19:30:43
【问题描述】:

我有这些模型

我想查询显示所有库存数量> 0 且不重复的产品。

我的查询:

$stock_products_limit = Stock::distinct('product_id')->where('quantity', '!=', 0)->get();

使用与股票相关的尺码表会更容易......但现在我没有它

我需要模型返回我,然后做一个 foreach:

@foreach($stock_products_limit as $stock_product)
 @foreach($stock_product->product->product_images as $i=>$product_image)
  ...
 @endforeach
...
@enforeach

在我的模型中,我建立了 hasMany 和 belongsTo 关系

我该如何进行查询?我一直在尝试独特的 group by ... 但对我来说没有任何效果。它只会删除数量为 0 的那些并重复产品 ID ...

我想要的查询示例:

SELECT DISTINCT(stocks.product_id)
FROM stocks
INNER JOIN products ON stocks.product_id = products.id
WHERE quantity != 0
ORDER BY product_id
LIMIT 10;

另一个示例查询(但 LIMIT 不适用于 IN)

SELECT * from products where id in (SELECT DISTINCT(product_id)
    FROM stocks
    INNER JOIN products ON stocks.product_id = products.id
    WHERE quantity != 0
    ORDER BY product_id)

【问题讨论】:

    标签: laravel


    【解决方案1】:

    您可能希望使用Product 模型,而不是将Stock 模型作为起点。那么你甚至不必考虑使用DISTINCT。让我们使用whereHas

    return Product::whereHas('stocks', function ($query) {
        $query->where('quantity', '>', 0);
    })
    ->limit(10)
    ->get();
    

    【讨论】:

    • 有效!!非常感谢,我不知道我可以这样做
    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 2017-12-11
    • 2023-02-02
    • 2018-12-09
    • 1970-01-01
    • 2015-07-07
    • 2018-01-26
    • 2021-07-23
    相关资源
    最近更新 更多