Heim >Backend-Entwicklung >PHP-Tutorial >Zeitstempelfeld in MySQL funktioniert nicht
Warum habe ich einen Feldtyp auf Zeitstempel eingestellt, aber der aktuelle Zeitstempel wurde beim Aktualisieren oder Hinzufügen nicht wie erwartet automatisch ausgefüllt?
Das Gleiche gilt für die Datentabelle, die ich mit Laravel's Migrate generiert habe. Das Zeitstempelfeld in der generierten Tabelle hat überhaupt keine Auswirkung. Was ist los?
Dies ist die Migrationsdatei
<code><?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateEquip extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('equip', function (Blueprint $table) { // $table->increments('id'); $table->smallInteger('equip_id')->unsigned()->comment('装备id'); $table->string('eqiup_name')->comment('装备名称'); $table->string('eqiup_desc')->comment('装备描述'); $table->timestamps(); $table->primary('equip_id'); }); } /** * Reverse the migrations. * * @return void */ public function down() { // } } </code>
Warum habe ich einen Feldtyp auf Zeitstempel eingestellt, aber der aktuelle Zeitstempel wurde beim Aktualisieren oder Hinzufügen nicht wie erwartet automatisch ausgefüllt?
Das Gleiche gilt für die Datentabelle, die ich mit Laravel's Migrate generiert habe. Das Zeitstempelfeld in der generierten Tabelle hat überhaupt keine Auswirkung. Was ist los?
Dies ist die Migrationsdatei
<code><?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateEquip extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('equip', function (Blueprint $table) { // $table->increments('id'); $table->smallInteger('equip_id')->unsigned()->comment('装备id'); $table->string('eqiup_name')->comment('装备名称'); $table->string('eqiup_desc')->comment('装备描述'); $table->timestamps(); $table->primary('equip_id'); }); } /** * Reverse the migrations. * * @return void */ public function down() { // } } </code>
Haben Sie das Zeitstempelfeld ON UPDATE CURRENT_TIMESTAMP
festgelegt?
Standardwert in den Laravel-Einstellungen
<code> $table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));</code>
Vielen Dank für die Einladung.
Standardmäßig verwaltet Eloquent automatisch die Felder created_at
und „update_at“ der Datenbanktabelle. Fügen Sie einfach diese beiden „Zeitstempel“-Felder zur Datenbanktabelle hinzu und Eloquent kümmert sich um den Rest. Wenn Sie nicht möchten, dass Eloquent diese Felder automatisch pflegt, fügen Sie der Modellklasse die folgenden Attribute hinzu:
<code>// 关闭自动更新时间戳 class User extends Eloquent { protected $table = 'users'; public $timestamps = false; }</code>
Sie verwenden Model überhaupt nicht, um Datenbankoperationen durchzuführen, und es hat nichts damit zu tun, ob Zeitstempel auf CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Laravel ist 5.1+
Laravel empfiehlt, dass Tabellennamen im Plural stehen, Ihr Tabellenname sollte equips
Laravel erfordert einen Primärschlüssel und der Name wird id empfohlen. Ihr Primärschlüssel wurde umbenannt
Benötige eine neue Modelldatei
<code>app/Equip.php</code>
Diese Klasse verweist automatisch auf die equips
Tabelle
<code>use Illuminate\Database\Eloquent; class Equip extends Model { //这3行是管理主键的 protected $primaryKey = 'equip_id'; public $incrementing = true; //主键是自增的 protected $keyType = 'int'; //主键类型 //如果要强制指定table名,取消注释下行,不然laravel会自动找equips表 //protected $table = 'equip'; }</code>
Bedienung
<code>$e = Equip::create([ 'eqiup_name' => 'wwww', 'eqiup_desc' => 'xxxx', ]); $e->update([ 'eqiup_name' => 'yyyy', ]);</code>
Wenn Sie es so machen, behält Laravel es immer noch nicht automatisch beicreated_at
updated_at
Ich werde meinen Kopf als Hocker verwenden, auf dem Sie sitzen können. Schließlich benutze ich Laravel schon länger Es ist unmöglich, die Zeitstempel in Ihrer Situation nicht zu deaktivieren