首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Laravel中定制日期变送器?

如何在Laravel中定制日期变送器?
EN

Stack Overflow用户
提问于 2013-08-23 11:30:49
回答 4查看 9.6K关注 0票数 3

我在数据库中创建了几个日期时间字段,正如Laravel文档中所描述的,我可以“自定义哪些字段会自动变化”。然而,没有一个例子可以说明它是如何做到的,也没有任何搜索结果。我该怎么做才能使某些字段自动变异?

例如,我在迁移中创建了一个名为"people“的表,其中一个字段被定义为:

代码语言:javascript
复制
class CreatePeopleTable extends Migration {
  public function up(){
    Schema::create("bookings",function($table){
      ...
      $table->dateTime("birthday");
      ...
    }
  }
}

我在模型中定义了“人”的模型:

代码语言:javascript
复制
class People extends Eloquent{
  //nothing here
}

如果我指的是People实例的生日,它将是字符串,而不是DateTime

代码语言:javascript
复制
$one=People::find(1);
var_dump($one->birthday);
//String

date应该能够将其直接转换为碳对象,但是文档并没有给出如何实现它的太多信息。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-09-06 10:10:59

根据这个文档,您可以使用模型成员函数getDates()来自定义哪些文件会自动变异,因此下面的示例将返回Carbon实例而不是字符串:

代码语言:javascript
复制
$one = People::find(1);
var_dump($one->created_at);//created_at is a field mutated by default
//Carbon, which is a subclass of Datetime

但它没有清楚地说明如何添加您自己的字段。我发现getDates()方法返回一个字符串数组:

代码语言:javascript
复制
$one = People::find(1);
echo $one->getDates();
//["created_at","modified_at"]

因此,您可以做的是将字段名附加到此方法的返回值:

代码语言:javascript
复制
class People extends Eloquent{
    public function getDates(){
        $res=parent::getDates();
        array_push($res,"birthday");
        return $res;
    }
}

现在,当您调用birthday字段时,它将作为一个碳实例返回:

代码语言:javascript
复制
$one = People::find(1);
var_dump($one->birthday);
//Carbon
票数 5
EN

Stack Overflow用户

发布于 2014-01-07 11:21:45

在人员模型中,只需添加以下数组:

代码语言:javascript
复制
protected $dates = array('birthday');

Laravel的Model.php内部将您的字段与默认字段合并,如下所示:

代码语言:javascript
复制
/**
     * Get the attributes that should be converted to dates.
     *
     * @return array
     */
    public function getDates()
    {
        $defaults = array(static::CREATED_AT, static::UPDATED_AT, static::DELETED_AT);

        return array_merge($this->dates, $defaults);
    }
票数 17
EN

Stack Overflow用户

发布于 2013-08-23 12:19:45

什么意思:自动变异?

如果您的意思是从DB检索后发生变异,请使用访问器和变异器(Laravel )。

将此添加到您的模型中:

代码语言:javascript
复制
public function getDateAttribute( $date )
{
     // modify $date as you want, example
     // $date = new \Carbon\Carbon($date);
     // $date->addDay()
     // return (string)$date
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18401771

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档