使用Eloquent选择关系计数为零的所有记录?

时间:2015-07-07 09:11:13

标签: php mysql sql laravel eloquent

用简单的英语:我有三张桌子。 subscription_type email_subscription有许多email s,其中有email_subscription个。{

我正在尝试选择具有特定subscription_type的所有email条记录,这些记录也没有statusHeld的{​​{1}}条记录{1}}。

我坚持使用的特定位只返回email_subscriptions,其中emails为零(在上面描述了附加的where子句)。

使用Eloquent,我已经能够得到一些方法,但我不知道如何选择关系计数为零的所有记录:

$subscriptionsWithNoCorrespondingHeldEmail = EmailSubscriptions::whereHas('subscriptionType', function($q) {
            $q->where('name', 'New Mission');
        })-; // What do I chain here to complete my query?

此外,这是否可以使用Eloquent或者我是否需要使用Fluent语法?

2 个答案:

答案 0 :(得分:6)

您可以使用has()方法查询关系存在:

has('emails', '=', 0)

例如:

$tooLong = EmailSubscriptions::whereHas('subscriptionType', function($q) {
    $q->where('name', 'New Mission');
})->has('emails', '=', 0)->get();

修改

您可以使用whereHas()whereDoesntHave()方法执行更多高级查询:

$tooLong = EmailSubscriptions::whereHas('subscriptionType', function($q) {
    $q->where('name', 'New Mission');
})
->whereDoesntHave('emails', function ($query) {
    $query->where('status', '=', 'whatever');
})->get();

答案 1 :(得分:0)

好的,我对你的问题的看法是你希望有一个

的所有电子邮件
  

特定的subscription_type,零(0)关联和状态=状态

如果是,那么你可以在where语句中使用数组。 像:

        $q->->where(array('status' => 'status','subscription_type'=>'what ever you want));