[英]Get all rows except any models already related
所以我在Laravel 5.3中有2个模型。 Practice
与Offer
,他们有着建立和工作的多对多关系。 我可以将要约附加到练习等上。我想检索与该练习不相关的所有要约。
登录的用户也属于带有practice_id
。
在我的控制器中,我要在与所有报价相关的构造函数中传递$offer
。 我尝试使用如下的reject()
方法,但没有得到任何回报,我无法弄清楚。
如果我使用$this->offer
我将得到所有信息。
$query = $this->offer->reject(function($offer){
return $offer->whereHas('practices', function($q) {
return $q->where('practice_id', Auth::user()->practice_id);
});
});
public function practice()
{
return $this->belongsTo(Practice::class);
}
public function users()
{
return $this->hasMany(User::class, 'practice_id');
}
public function offers()
{
return $this->belongsToMany(Offer::class, 'offer_practice')->withTimestamps();
}
public function practices()
{
return $this->belongsToMany(Practice::class, 'offer_practice')->withTimestamps();
}
请帮忙。
您可以像这样使用whereHas
:
该查询为您提供与那些与已认证用户有关系的实践无关的提议。
$offers = Offer::whereHas('practices', function($q) {
$q->where('id', '<>', auth()->user()->practice->id);
});
更新:
而以下查询为您提供了与那些与数据库中任何用户有关系的实践无关的提议。
$practice_id_arr = Practice::has('users')->pluck('id')->all();
$offers = Offer::whereHas('practices', function($q) use($practice_id_arr) {
$q->whereNotIn('id', $practice_id_arr);
});
以下查询为您提供了与任何实践都不相关的报价:
$offers = Offer::doesntHave('practices')->get();
以下查询为您提供了与所有实践相关的报价:
$offers = Offer::has('practices')->get();
希望这可以帮助!
我已经成功地在@SaumyaRastogi的帮助下将其解决了一个小的查询。
$offers = $this->offer->whereHas('practices', function($q) {
$q->where('practice_id', '<>', auth()->user()->practice->id);
})->orHas('practices', '<', 1)->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.