Zeitstempelfeld in MySQL funktioniert nicht

WBOY
Freigeben: 2023-03-01 15:16:02
Original
1359 Leute haben es durchsucht

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>
Nach dem Login kopieren
Nach dem Login kopieren

Antwortinhalt:

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>
Nach dem Login kopieren
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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

gesetzt sind
  1. Laravel ist 5.1+

  2. Laravel empfiehlt, dass Tabellennamen im Plural stehen, Ihr Tabellenname sollte equips

  3. lauten
  4. Laravel erfordert einen Primärschlüssel und der Name wird id empfohlen. Ihr Primärschlüssel wurde umbenannt

  5. Benötige eine neue Modelldatei

<code>app/Equip.php</code>
Nach dem Login kopieren

Diese Klasse verweist automatisch auf die equipsTabelle

<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>
Nach dem Login kopieren

Bedienung

<code>$e = Equip::create([
    'eqiup_name' => 'wwww',
    'eqiup_desc' => 'xxxx',
]);

$e->update([
   'eqiup_name' => 'yyyy', 
]);</code>
Nach dem Login kopieren

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

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage