【问题标题】:laravel whereHas include no relationlaravel whereHas 不包含任何关系
【发布时间】:2016-12-26 14:00:12
【问题描述】:

如何查询关系并仍然包含没有关系的模型?有两种型号

  • 商店

  • 产品

代码

// Store
public function products() {
   $this->belongsToMany('App\Store');
}

// Product
public function stores() {
   $this->belongsToMany('App\Product');
}

还有一个用于连接它们的数据透视表,称为product_store。有些商店没有任何产品。我如何查询所有产品,即使是那些不属于任何商店的产品,例如:

Product::where('store.id', '=', 1)->get()

这就是我目前的做法。

Product::whereHas('stores', function($query) {
    $query->where('id', '=', $store_id);
});

但是作为laravel docs mention这个

检索至少有一个商店的所有产品

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:
    Product::doesntHave('stores')->orWhereHas('stores', function($query) {
        $query->where('id', '=', $store_id);
    })->get();
    

    【讨论】:

    • 我如何将$product->stores 过滤成一个。即 $store_id
    • 此查询为您提供带有 $store_id 的商店产品
    • 是的。它还为我提供了任何商店都没有的产品。但我也想要不在 $store_id 和其他商店中的产品
    • 我不明白你想要什么。你能举个例子吗?
    • 假设我们有三个产品 A、B、C。和两个商店 X 和 Y。A 在 X 中可用,B 在 Y 中可用,C 在任何地方都不可用。如果我对 X 运行您的查询,我只会得到 A 和 C。但我也想要 B。
    猜你喜欢
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2017-10-17
    • 2014-01-11
    • 2020-12-23
    • 2016-09-05
    • 2021-05-25
    • 2020-06-12
    相关资源
    最近更新 更多