【问题标题】:Laravel- Eloquent many to many get unattached dataLaravel-雄辩的多对多获得未附加的数据
【发布时间】:2019-07-25 19:02:04
【问题描述】:

我的应用上有UserShopProduct 模型。和这样的关系:

用户

public function products(){
   return $this->hasMany("App\Product");
}
public function shops(){
   return $this->hasMany("App\Shop");
}

商店

public function user(){
    return $this->belongsTo("App\User");
}
public function products(){
    return $this->belongsToMany("App\Product");
}

产品

public function user(){
    return $this->belongsTo('App\User');
}
public function shops(){
    return $this->belongsToMany("App\Shop");
}

因此,用户可以添加产品商店,然后将产品附加到多个商店。现在我可以在product 页面上通过$product->shops 获得所有附加的商店,并且通过auth()->user()->shops 获得所有的auth 用户购物。实际上,我想在Product 页面上显示未附加到此Product 的auth 用户商店。根据 Laravel 文档,我编写了一些代码,但由于某种原因它不起作用。我的代码是:

auth()->user()->shops()->whereDoesntHave('products', function (Builder $query) {
                                $query->where('id','!=', $product->id);
                            })->get();

错误:

我们将不胜感激。

谢谢

【问题讨论】:

  • 如果您将function (Builder $query) 更改为简单的function ($query),它应该工作。此外,包括use($product),以便$product->id 在范围内可访问。总之:->whereDoesntHave(function($query) use($product){ ... })->get()
  • 嗨@TimLewis 它现在正在工作。请将第一个更改解释为答案,我想接受答案。

标签: laravel eloquent


【解决方案1】:

在此处将评论转换为答案。

首先,function(Builder $query) 的使用针对的是不正确的 Builder 版本(可能是命名空间问题),因此只需从函数中删除 Builder 即可解决问题。

其次,要在新函数范围内使用$product,需要通过使用use($product),否则会出现Undefined variable $product错误。

总的来说,新函数应该是这样的:

auth()->user()->shops()->whereDoesntHave('products', function ($query) use($product) {
  $query->where('id','!=', $product->id);
})->get();

【讨论】:

    猜你喜欢
    • 2014-09-27
    • 1970-01-01
    • 2014-10-03
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 2017-06-04
    • 2016-11-03
    相关资源
    最近更新 更多