Php 当表2 id=x时,Laravel 5雄辩地选择表1中与表2无关的项目
我正试图找到一种类似于has的方法,使我能够做到以下几点: 当subscriptions.id=x时,从未链接到订阅表的用户中选择所有用户 用户可能有subscription.id=1、subscription.id=2但不是3的链接。所以,当问题中的订阅条目id为X时,我想排除已经与订阅表有链接的用户 用户表: user1可以访问subscr1和subscr2 user2没有链接 用户3有到subscr1的链接 subscr表: subscr1 亚CR2 亚CR3Php 当表2 id=x时,Laravel 5雄辩地选择表1中与表2无关的项目,php,mysql,laravel-5.1,Php,Mysql,Laravel 5.1,我正试图找到一种类似于has的方法,使我能够做到以下几点: 当subscriptions.id=x时,从未链接到订阅表的用户中选择所有用户 用户可能有subscription.id=1、subscription.id=2但不是3的链接。所以,当问题中的订阅条目id为X时,我想排除已经与订阅表有链接的用户 用户表: user1可以访问subscr1和subscr2 user2没有链接 用户3有到subscr1的链接 subscr表: subscr1 亚CR2 亚CR3 因此,当我想从subscr表
因此,当我想从subscr表中获得一个没有与subscr3项链接的用户列表时,我希望看到user2和user3,我认为您可以通过以下方式通过关系获得:
// 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
}
假设您在应用程序\用户模型中设置了如下关系,您可以使用:
然后,您可以使用如下内容:
$subscriptionId = 3;
$users = User::whereDoesntHave('subscriptions', function($q) use($subscriptionId) {
$q->where('subscriptions.id', $subscriptionId);
})
->get();
如果您在sqlfidde中添加了一些内容,则会更容易帮助您
$subscriptionId = 3;
$users = User::whereDoesntHave('subscriptions', function($q) use($subscriptionId) {
$q->where('subscriptions.id', $subscriptionId);
})
->get();