所以我在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();
}
请帮忙。
答案 0 :(得分:1)
您可以像这样使用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();
希望这有帮助!
答案 1 :(得分:1)
我已经设法在@SaumyaRastogi的帮助下将其解决为一个小问题。
$offers = $this->offer->whereHas('practices', function($q) {
$q->where('practice_id', '<>', auth()->user()->practice->id);
})->orHas('practices', '<', 1)->get();