我的应用程序上有User
,Shop
和Product
模型。和这样的关系:
用户
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->shops
页面上通过product
获取所有附属商店,并通过auth()->user()->shops
对所有商店进行身份验证。实际上,我想在Product
页上显示未连接到此Product
的auth用户商店。根据Laravel文档,我编写了一些代码,但是由于某种原因它不起作用。我的代码是:
auth()->user()->shops()->whereDoesntHave('products', function (Builder $query) {
$query->where('id','!=', $product->id);
})->get();
任何帮助将不胜感激。
谢谢
答案 0 :(得分:0)
在此处将评论转换为答案。
首先,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();