【问题标题】:How to get days in Eloquent Query In Laravel如何在 Laravel 的 Eloquent Query 中获取天数
【发布时间】:2021-09-18 13:06:32
【问题描述】:

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

$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 循环。

对不起,我的英语不好。

【问题讨论】:

  • 你可以显示具有 dp_credential 关系的模型文档吗?
  • 查看更新我的问题

标签: laravel laravel-5 eloquent eloquent-relationship


【解决方案1】:

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

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

【讨论】:

  • 感谢您为您解答,但收到此错误,语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取在 ') 附近使用的正确语法
  • SR。我更新了我的代码,你可以再试一次。
  • @AnkitaDobariya 你找到答案了吗?
  • 我也想用这种方法计算天数,没有得到天数
猜你喜欢
  • 2014-03-12
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 2019-08-01
  • 2017-06-14
  • 1970-01-01
  • 2019-10-19
  • 1970-01-01
相关资源
最近更新 更多