如何在 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();
我想在 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();