首頁  >  文章  >  後端開發  >  mysql中的timestamps欄位不起作用

mysql中的timestamps欄位不起作用

WBOY
WBOY原創
2016-12-01 00:25:201354瀏覽

為什麼我設定了某個欄位類型為timestamps,但是他並沒有像我預期的一樣在更新或新增的時候自動填入當前時間戳記?

還有我用Laravel的migrate產生的資料表也一樣,產生的表裡面那個timestamps欄位根本不起效果。是怎麼回事?

這是migration檔

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

回覆內容:

為什麼我設定了某個欄位類型為timestamps,但是他並沒有像我預期的一樣在更新或新增的時候自動填入當前時間戳記?

還有我用Laravel的migrate產生的資料表也一樣,產生的表裡面那個timestamps欄位根本不起效果。是怎麼回事?

這是migration檔

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

你設定timestamp 欄位 ON UPDATE CURRENT_TIMESTAMP 了嗎
laravel設定下預設值

<code> $table->timestamp('updated_at')->default(\DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));</code>

謝邀。

預設 Eloquent 會自動維護資料庫表的 created_at 和 updated_at 欄位。只要把這兩個「時間戳記」欄位加到資料庫表, Eloquent 就會處理剩下的工作。如果不想讓 Eloquent 自動維護這些字段,把下面的屬性加到模型類別裡:

<code>// 关闭自动更新时间戳
class User extends Eloquent {
    protected $table = 'users';
    public $timestamps = false;
}</code>

你根本就沒用Model來做資料庫的操作,和timestamps是否是CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的設定無關

  1. Laravel 是 5.1+

  2. Laravel是建議表名是複數的,你的表名應該是equips

  3. Laravel要求主鍵,並且名字建議為id,你的主鍵換名字了

  4. 要new 一個Model檔

<code>app/Equip.php</code>

這個類別會自動指向equips

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

操作

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

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

你如果是這麼弄的,Laravel仍然沒有自動維護created_at updated_at
我把頭給你當凳子坐,畢竟我用Laravel都2年多了,不關閉timestamps,是不可能出現你的情況的

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn