Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当表2 id=x时,Laravel 5雄辩地选择表1中与表2无关的项目_Php_Mysql_Laravel 5.1 - Fatal编程技术网

Php 当表2 id=x时,Laravel 5雄辩地选择表1中与表2无关的项目

Php 当表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表

我正试图找到一种类似于has的方法,使我能够做到以下几点:

当subscriptions.id=x时,从未链接到订阅表的用户中选择所有用户

用户可能有subscription.id=1、subscription.id=2但不是3的链接。所以,当问题中的订阅条目id为X时,我想排除已经与订阅表有链接的用户

用户表: user1可以访问subscr1和subscr2 user2没有链接 用户3有到subscr1的链接

subscr表: subscr1 亚CR2 亚CR3


因此,当我想从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();