Change name of Laravel's created_at and updated_at
Can I map Laravel's timestamps from:
created_at
to post_date
and post_date_gmt
?
updated_at
to post_modified
and post_modified_gmt
?
I'm migrating a Wordpress application to Laravel.
I'm accessing a copy of the Wordpress database using Laravel. The live version of the database is still in use so I don't want to change the schema.
The Posts table has post_date
, post_date_gmt
, post_modified
and post_modified_gmt
, but Laravel is expecting created_at
and updated_at
.
Is there anyway to change the column names that Laravel looks for?
I'd like Laravel to update the timestamps of all the columns that are already there.
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.
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
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';
}