我正在尝试找到一个类似于has()的方法,它允许我执行以下操作:
在subscriptions.id = x
时,选择来自未与订阅表链接的用户的所有用户用户可能有一个指向subscription.id = 1,subscription.id = 2但不是3的链接。所以我想排除已经有问题的订阅条目ID为X的用户已经有订阅表的链接
用户表: user1可以访问subscr1和subscr2 user2没有链接 user3链接到subscr1
subscr表: subscr1 subscr2 subscr3
所以当我想获得一个没有从subscr表中的item subscr3链接的用户列表时,我希望看到user2和user3
答案 0 :(得分:0)
我认为你可以通过这种关系得到这个:
// User model
public function subscriptions()
{
return $this->belongsToMany('App\Subscription');
}
public function hasSubscription(Subscription $subscription)
{
return (bool)$this->subscriptions()
->where('subscription_id', $subscription->id)
->first();
}
用法:
if($user->hasSubscription($subscription)) {
// User has subscription
}
答案 1 :(得分:0)
您可以使用whereDoesntHave,假设您在App\User
模型中设置了这样的关系:
public function subscriptions()
{
return $this->belongsToMany('App\Subscription');
}
然后你可以使用这样的东西:
$subscriptionId = 3;
$users = User::whereDoesntHave('subscriptions', function($q) use($subscriptionId) {
$q->where('subscriptions.id', $subscriptionId);
})
->get();