如何在 Eloquent 中查询 Laravel 中的天数

How to get days in Eloquent Query In Laravel

我想在 Eloquent 查询 Laravel 中查找两个日期之间的天数。 我有这样的查询,

$credentials = Documents::whereIn('agency_id', $agency_ids)
    ->with('dp_credential')
    ->get()->toArray();

if (count($credentials)) {
    foreach ($credentials as $val) {
        if ($val['dp_credential']) {
            $current_date = new DateTime(date('Y-m-d'));
            $expiry_date = new DateTime($val['dp_credential']['expiry_date']);
            $interval = $current_date->diff($expiry_date);
            $days = $interval->format('%r%a'); // if you getting days in minus then use %r
            $val['dp_credential']['days'] = $days;
            $val['dp_credential']['is_expiry'] = 0;
            if ($days < 30) {
                $val['dp_credential']['is_expiry'] = 1;
            }
        }
    }
}

预加载关系

public function dp_credential() {
    return $this->hasone('App\Model\ClinicianCredentials', 'document_type', 'id')
        ->where('clinician_id', Auth::User()->id);
}

现在我想在当前日期和 dp_credential 之间的 eloquent 查询中的每个循环中查找不存在一个日期的日子。如果天数少于 30 天,那么我想添加一个额外的密钥,是否可以不用 for each 循环。

这很好用,但我想要这个没有 for each 循环。

抱歉我的英语不好。

您可以调用其他查询构建器方法来进一步自定义预加载操作:

Documents::whereIn('agency_id', $agency_ids)
           ->with(['dp_credential' => function ($query) {
                 $query->select(DB::raw('*, datediff(expiry_date, now()) as days, IF(datediff(expiry_date, now()) < 30, 1, 0) as is_expiry'));
           }])->get()->toArray();