Kann ich die Zeitstempel von Laravel zuordnen:
created_at
zu post_date
und post_date_gmt
?
updated_at
zu post_modified
und post_modified_gmt
?
Ich migriere eine Wordpress-Anwendung zu Laravel.
Ich greife mit Laravel auf eine Kopie der Wordpress-Datenbank zu. Die Live-Version der Datenbank wird noch verwendet, daher möchte ich das Schema nicht ändern.
Die Tabelle Posts enthält post_date
, post_date_gmt
, post_modified
und post_modified_gmt
, aber Laravel erwartet created_at
und updated_at
.
Gibt es überhaupt eine Änderung der Spaltennamen, nach denen Laravel sucht?
Ich möchte, dass Laravel die Zeitstempel aller bereits vorhandenen Spalten aktualisiert.
Die akzeptierte Antwort kann leider Probleme beim Aktualisieren von Zeitstempeln verursachen.
Sie sollten Konstanten in Ihrem Modell besser überschreiben:
const CREATED_AT = 'post_date';
const UPDATED_AT = 'post_modified';
dann geben die Methoden getCreatedAtColumn
und getUpdatedAtColumn
post_date
und post_modified
zurück, schaden jedoch nicht.
Für die anderen Spalten müssen Sie Ereignisse wie @Oni verwenden.
Wenn Sie in die Quelle der Eloquent
-Klasse schauen
https://github.com/illuminate/database/blob/4.2/Eloquent/Model.php#L223-L235
Sie sollten diese Spaltennamen leicht ändern können, indem Sie diese Konstanten überschreiben.
<?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';
}
In Bezug auf die _gmt
-Version dieser Zeitstempel möchten Sie möglicherweise events
prüfen. Hier ist ein guter Anfang
Fügen Sie dies einfach in Ihre Tabellenmodelldatei ein.
const CREATED_AT = 'your_custom_created_at_field_name';
const UPDATED_AT = 'your_custom_updated_at_field_name';
Mein Modell sieht so aus, um Verwirrungen zu vermeiden
class diarymodule extends Model
{
protected $table = 'diarymodule';
const CREATED_AT = 'CreatedDate';
const UPDATED_AT = 'UpdatedDate';
}
Sie können versuchen, das Attribut Getter und Getter zu verwenden:
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');
}
}
Ich weiß nicht, ob das funktionieren wird, aber Sie könnten es versuchen. Sicher eine Basis, auf der man vielleicht weitermachen kann - man muss damit herumspielen.