假设有Website
这样的模型:
class Website extends Authenticatable
{
protected $primaryKey = 'website_id';
public function deposits ()
{
return $this->hasMany(\App\AdminDeposit::class, 'website', 'website_id');
}
}
另一方面,有一个AdminDepoist
模型,如下所示:
class AdminDeposit extends Model
{
protected $primaryKey = 'deposit_id';
public function website ()
{
return $this->belongsTo(\App\Website::class, 'website', 'website_id');
}
}
正如您所看到的,他们之间存在一对多的关系,每个网站都有一些存款。
AdminDeposit
模型具有created_at
属性,每次插入新存款时都会设置该属性。
现在,我想选择自上次存款时间不到 5 天的网站。 (表示if(website->last_deposit <= 5 days)
)
然后我想选择他们最后一次存入 5 和 10 天的网站。
最后那些他们的最后存款大于 30 天。
我知道应该使用whereHas()
和 Carbon 库,但我不知道怎么做?
答案 0 :(得分:2)
与get one latest存款建立新的hasOne
关系:
public function latestDeposit()
{
return $this->hasOne(AdminDeposit::class, 'website', 'website_id')->latest();
}
网站上次存款不到5天
Website::whereHas('latestDeposit', function($q) {
$q->where('created_at', '>', now()->subDays(5));
})->get();
他们最后一次存款5到10天的网站。
Website::whereHas('latestDeposit', function($q) {
$q->whereBetween('created_at', [now()->subDays(10), now()->subDays(5)]);
})->get();
他们最后一次存款超过30天
Website::whereHas('latestDeposit', function($q) {
$q->where('created_at', '<', now()->subDays(30));
})->get();