在laravel中使用哪里与碳一起使用

时间:2018-01-14 17:10:30

标签: php laravel

假设有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 库,但我不知道怎么做?

1 个答案:

答案 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();