Heim  >  Artikel  >  Backend-Entwicklung  >  Zeitstempelfeld in MySQL funktioniert nicht

Zeitstempelfeld in MySQL funktioniert nicht

WBOY
WBOYOriginal
2016-12-01 00:25:201323Durchsuche

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>

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>

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

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>

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>

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

Stellungnahme:
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