使用Laravel Eloquent查询具有相同属性的最小数量的相关模型

时间:2017-05-31 12:59:42

标签: laravel eloquent

要解释标题上的问题并不容易,所以我将尝试用这个例子来解释:

表/模型

  • 交易(id,subscription_id,billing_date)
  • 订阅(id,user_id)
  • 用户(id)

  • Transaction属于Subscription;

  • Subscription属于User;
  • User有很多Subscription;
  • Subscription有很多Transaction;

我想检索与transactions相关的所有与同一subscription相关的user,但前提是两个或更多transactions billing_date

基本上我想知道是否存在与同一用户相关的交易,这些交易将在今天开始计费。这就是我现在所拥有的:

==

我也试过了:

$transactions = Transaction::
    whereHas('subscription', function ($query) {
        $query->groupBy('subscriptions.user_id')
            ->havingRaw('COUNT(*) > 1');
})
    ->where('billing_date', '<=', Carbon::tomorrow())
    ->where('billing_date', '>=', Carbon::today())
    ->toSql();

2 个答案:

答案 0 :(得分:0)

我认为第二个where子句正在覆盖第一个子句,多个where子句可以作为数组传递:

->where([['billing_date', '<=', Carbon::tomorrow()]
        ,['billing_date', '>=', Carbon::today()]
        ])
->get();

答案 1 :(得分:0)

我不确定这是DRYest解决方案,但你可以建立第二种关系:

class Transaction {
    public function currentSubscriptions() {
        return $this->hasMany('App\Models\Subscription')
            ->where('billing_date', '<=', Carbon::tomorrow())
            ->where('billing_date', '>=', Carbon::today());
    }
}

然后

$transactions = Transaction::has('currentSubscriptions', '>', 1)
     ->with('subscriptions')->get();