Ich bin dabei, eine unserer Webanwendungen von CodeIgniter nach Laravel zu konvertieren. In diesem Moment möchten wir jedoch nicht die Felder updated_at
/created_at
Zu allen unseren Tabellen hinzufügen, da wir bereits eine Protokollierungsklasse haben, die dies alles ausführlicher für uns ausführt.
Ich bin mir bewusst, dass ich $timestamps = false;
Einstellen kann in:
Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php
Ich möchte jedoch lieber keine Kerndatei für Laravel ändern, oder ich möchte, dass alle meine Modelle diese Datei oben haben. Gibt es eine Möglichkeit, dies an anderer Stelle für alle Modelle zu deaktivieren?
Sie müssen entweder in jedem Modell public $timestamps = false;
Deklarieren oder ein BaseModel erstellen, es dort definieren und von allen Ihren Modellen erweitern lassen, anstatt es eloquent zu machen. Wenn Sie Eloquent verwenden, MÜSSEN Pivot-Tabellen unbedingt Zeitstempel haben.
Update: Beachten Sie, dass Zeitstempel in Pivot-Tabellen nach Laravel v3 nicht mehr erforderlich sind.
Update: Sie können Zeitstempel auch deaktivieren, indem Sie $table->timestamps()
aus Ihrer Migration entfernen.
Einfach platzieren public $timestamps = false;
in Ihrem Modell.
Wenn Sie nur die Aktualisierung von updated_at deaktivieren müssen, fügen Sie diese Methode Ihrem Modell hinzu.
public function setUpdatedAtAttribute($value)
{
// to Disable updated_at
}
Dadurch wird die übergeordnete Methode setUpdatedAtAttribute () überschrieben. created_at funktioniert wie gewohnt. Auf die gleiche Weise können Sie eine Methode schreiben, um nur das Aktualisieren von created_at zu deaktivieren.
Wenn Sie 5.5.x verwenden:
const UPDATED_AT = null;
Und für das Feld "created_at" können Sie Folgendes verwenden:
const CREATED_AT = null;
Stellen Sie sicher, dass Sie auf der neuesten Version sind. (Dies wurde in Laravel 5.5.0 und erneut in 5.5.5 behoben) gebrochen.
Eloquentes Modell:
class User extends Model
{
protected $table = 'users';
public $timestamps = false;
}
Oder einfach mal probieren
$users = new Users();
$users->timestamps = false;
$users->name = 'John Doe';
$users->email = '[email protected]';
$users->save();
Wenn Sie Zeitstempel wie oben erwähnt aus einem vorhandenen Modell entfernen möchten, fügen Sie diese in Ihr Modell ein:
public $timestamps = false;
Erstellen Sie auch eine Migration mit folgendem Code in der up()
-Methode und führen Sie sie aus:
Schema::table('your_model_table', function (Blueprint $table) {
$table->dropTimestamps();
});
Sie können $table->timestamps()
in Ihrer down()
-Methode verwenden, um ein Rollback zu ermöglichen.
deklarieren Sie einfach die Variable public
timestamps in Ihrem Model
bis false
und alles wird großartig funktionieren.
public $timestamps = false;
fügen Sie diese Zeile in Ihr Modell ein
vorhandene Variable überschreiben
$timestamps
true bis false
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
Überschreiben Sie die Funktionen setUpdatedAt()
und getUpdatedAtColumn()
in Ihrem Modell
public function setUpdatedAt($value)
{
//Do-nothing
}
public function getUpdatedAtColumn()
{
//Do-nothing
}