2016-01-11 3 views
1

Я использую Laravel Framework version 5.2.7. Я cretaed миграции базы данных, как показано ниже:timestamps in laravel 5.2.7 имеют значения по умолчанию null

<?php 

use Illuminate\Database\Schema\Blueprint; 
use Illuminate\Database\Migrations\Migration; 

class CreateLessonsTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('lessons', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('title'); 
      $table->text('body'); 
      $table->boolean('some_bool'); 
      $table->timestamps(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('lessons'); 
    } 
} 

Я пошел в базе данных MySql виртуальной машины и использовать команду desc lessons;, это то, что я получаю: enter image description here

Я не понимаю, почему created_at и updated_at colums имеют NULL как Default. я пошел в Laravel 5.2 документации и увидел это:

$table->timestamps(); Adds created_at and updated_at columns. $table->nullableTimestamps(); Same as timestamps(), except allows NULLs.

Так, согласно документации $table->timestamps(); не должны позволять NULL в Default. Но все же я получаю created_at и updated_at colums с NULL как Default. Я смущен. Пожалуйста помоги!!

Infact эти colums Шоул быть, как этот стол: enter image description here

ответ

2

Если вы используете $ стол-> timestamp ('created_at') вместо $ table-timestamps() в вашем строителе shcema, значение по умолчанию будет CURRENT_TIMESTAMP, и оно не будет NULL.

Аналогично хранить время обновления записи, $ table-> timestamp ('updated_at').

Разница заключается только в письме 's' и указывать имя столбца, например created_at/created, updated_at/updated.

+0

'$ table-> timestamp ('added_on');' - принимает CURRENT_TIMESTAMP, но '$ table-> timestamp ('created_date');' does not. – 151291

0

Это не позволяет NULL, как вы видите, в столбце Null, они все настроены на NO

+0

Я обновил свой вопрос. Я хотел знать, почему у 'created_at' и' updated_at' нет 'CURRENT_TIMESTAMP' как' Defaut'. – Vicky

0

Не уверен, если это отвечает на вопрос или нет, но ...

по умолчанию timestamp метод (по крайней мере, в Laravel 5.4) выводит следующий SQL:

`my_new_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

Что, что вы находясь в поиске. Если вы установите столбец timestamp равным nullable, значением по умолчанию будет NULL, а также значением null.

Итак:

$table->timestamp('my_new_timestamp')->nullable(); 

Даст следующий SQL:

`my_new_timestamp` timestamp NULL DEFAULT NULL 
Смежные вопросы