要解释标题上的问题并不容易,所以我将尝试用这个例子来解释:
表/模型
用户(id)
Transaction
属于Subscription
;
Subscription
属于User
; User
有很多Subscription
; Subscription
有很多Transaction
; 我想检索与transactions
相关的所有与同一subscription
相关的user
,但前提是两个或更多} 今天<{1}} 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();
答案 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();