Change name of Laravel's created_at and updated_at

前端 未结 4 1157
眼角桃花
眼角桃花 2020-12-02 14:09

Can I map Laravel\'s timestamps from:

created_at to post_date and post_date_gmt?

updated_at to post

相关标签:
4条回答
  • 2020-12-02 14:53

    Just put this in your tables model file,

     const CREATED_AT = 'your_custom_created_at_field_name';
     const UPDATED_AT = 'your_custom_updated_at_field_name';
    

    My model looks like this for avoiding confusions

    class diarymodule extends Model
    {
        protected $table = 'diarymodule';
        const CREATED_AT = 'CreatedDate';
        const UPDATED_AT = 'UpdatedDate';
    }
    
    0 讨论(0)
  • You could try using the attribute getters and getters:

    class Post extends Eloquent
    {
        public function getCreatedAtAttribute()
        {
            return $this->attributes['post_date'];
        }
    
        public function setCreatedAtAttribute($value)
        {
            $this->attributes['post_date'] = $value;
    
            // this may not work, depends if it's a Carbon instance, and may also break the above - you may have to clone the instance
            $this->attributes['post_date_gmt'] = $value->setTimezone('UTC');
        }
    }
    

    I don't know if this will work, but you could give it a go. Certainly a base to go on maybe - you'll have to play around with it.

    0 讨论(0)
  • 2020-12-02 15:00

    If you look into the source of the Eloquent class

    https://github.com/illuminate/database/blob/4.2/Eloquent/Model.php#L223-L235

    You should be able to change these column names pretty easily by overriding those constants.

    <?php
    
    class YourModel extends Eloquent {
    
        /**
         * The name of the "created at" column.
         *
         * @var string
         */
        const CREATED_AT = 'post_date';
    
        /**
         * The name of the "updated at" column.
         *
         * @var string
         */
        const UPDATED_AT = 'post_modified';
    
    }
    

    As for the _gmt version of those timestamps, you might want to look into events. Here is a good start

    http://driesvints.com/blog/using-laravel-4-model-events

    0 讨论(0)
  • 2020-12-02 15:11

    The accepted answer may cause problems with updating timestamps unfortunately.

    You'd better override consts on your model:

    const CREATED_AT = 'post_date';
    const UPDATED_AT = 'post_modified';
    

    then methods getCreatedAtColumn and getUpdatedAtColumn will return post_date and post_modified respectively, but won't do any harm.

    For the other columns you need use events like @Oni suggested.

    0 讨论(0)
提交回复
热议问题