【问题标题】:Laravel 5.2 get the closest date from eloquent collectionLaravel 5.2 从 eloquent 集合中获取最近的日期
【发布时间】:2016-08-05 18:00:07
【问题描述】:

我有 Eloquent Event 模型,它与多个日期相关,如下所示:

$event->dates // shows Collection of 8 Eloquent date models

之后我需要选择唯一的日期,即最接近当前时间的日期。我知道如何使用原始 SQL 或 DB 类的查询来做到这一点。但是没有更好的解决方案吗?我不想跳入数据库获取数据,我已经有了。

eloquent 模型中的日期格式令人惊讶地是字符串。

【问题讨论】:

  • 你可以使用我认为的属性访问器
  • 是的,我知道这一点。但是,我如何从雄辩的模型集合中选择最接近的日期?我仍然不知道如何完成。
  • 检查我的答案,我认为这就是你想要完成的?

标签: eloquent laravel-5.2 relationships


【解决方案1】:

你可以像这样使用我们在 laravel 中调用的 mutators ->

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Event extends Model
{
    public function dates()
    {
        return $this->hasMany('Date');
    }

    /**
     * Get Dates for the event.
     *
     * @param  string  $value
     * @return array
     */
    public function getDates()
    {
        $dates = $this->dates()->getQuery()->orderBy('created_at', 'asc')->get();
        return $dates;
    }
}

希望这会有所帮助。

更新

我认为现在您也可以像这样在模型定义中直接执行此操作-

return $this->hasMany('Date')->orderBy('created_at', 'asc')

【讨论】:

  • getQuery() 是你的自定义函数吗?刚试过这个,Laravel 5.2 触发方法 getQuery 不存在。例外。此外,我在官方文档中找不到任何提及 getQuery 方法的内容。你能解释一下吗?
  • 您尝试过更新的答案吗?我在关系本身中在哪里调用 orderBy 方法?我认为 getQuery 已从 L5 中弃用...
  • 是的,我试过了,效果很好!非常感谢。
猜你喜欢
  • 2019-10-30
  • 2014-10-30
  • 2017-07-06
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 2012-10-13
相关资源
最近更新 更多