当表2 id = x时,Laravel 5 Eloquent选择表1中与表2中没有关系的项目

时间:2015-11-13 18:12:42

标签: php mysql laravel-5.1

我正在尝试找到一个类似于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

2 个答案:

答案 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();