2017-08-22 1 views
1

je table de migration:graines Laravel pour dateTime doesnt'work

public function up() 
{ 
    Schema::create('order_statuses', function (Blueprint $table) { 
     $table->integer('order_id')->unsigned(); 
     $table->integer('status_id')->unsigned(); 
     $table->dateTime('created_at')->default(DB::raw('CURRENT_TIMESTAMP')); 

     $table->foreign('order_id')->references('id')->on('orders'); 
     $table->foreign('status_id')->references('id')->on('order_status_names'); 
    }); 
} 

Maintenant, je voudrais faire des semences, mais je les graines pour cela, mais je problème quand je veux avoir des dates différentes. Voici mes graines:

use Illuminate\Database\Seeder; 
use Illuminate\Support\Facades\DB; 
use Carbon\Carbon; 

class OrderStatusesTableSeeder extends Seeder 
{ 
public function run() 
{ 
    DB::statement('SET FOREIGN_KEY_CHECKS=0;'); 
    DB::table('order_statuses')->truncate(); 
    DB::statement('SET FOREIGN_KEY_CHECKS=1;'); 

    DB::table('order_statuses')->insert([ 
      [ 
       'order_id' => 1, 
       'status_id' => 1, 
       'created_at' => \Carbon\Carbon::createFromDate(2014,07,22)->toDateTimeString() 
      ],[ 
       'order_id' => 2, 
       'status_id' => 2, 
      ],[ 
       'order_id' => 3, 
       'status_id' => 3, 
      ],[ 
       'order_id' => 1, 
       'status_id' => 2, 
      ] 
     ] 
    ); 
} 
} 

J'ai erreur dans mon terminal:

[Illuminate\Database\QueryException]           
SQLSTATE[21S01]: Insert value list does not match column list: 1136 
Column 
count doesn't match value count at row 2 (SQL: insert into 
`order_statuses` 
(`created_at`, `order_id`, `status_id`) values (2014-07-22 11:32:07, 
1, 1) 
, (2, 2), (3, 3), (1, 2)) 

est ici une possibilité de le réparer? Le carbone est à LAravel ou je dois l'installer?

+0

Vous obtenez cette erreur car vos tableaux sont différents, c'est-à-dire que vous avez 'created_at' dans votre premier tableau mais pas dans le reste d'entre eux. –

Répondre

3

[Illuminate \ Database \ QueryException]
SQLSTATE [21S01]: Insérer la liste de valeur ne correspond pas à la liste des colonnes

signifie que vous passez un mauvais numéro d'argument pour trois lignes:

DB::table('order_statuses')->insert(
    [ 
     [ 
      'order_id' => 1, 
      'status_id' => 1, 
      'created_at' => \Carbon\Carbon::createFromDate(2014,07,22)->toDateTimeString() 
     ],[ 
      'order_id' => 2, 
      'status_id' => 2, 
      'created_at' => \Carbon\Carbon::createFromDate(2014,07,22)->toDateTimeString() 
     ],[ 
      'order_id' => 3, 
      'status_id' => 3, 
      'created_at' => \Carbon\Carbon::createFromDate(2014,07,22)->toDateTimeString() 
     ],[ 
      'order_id' => 1, 
      'status_id' => 2, 
      'created_at' => \Carbon\Carbon::createFromDate(2014,07,22)->toDateTimeString() 
     ] 
    ] 
); 

Vous pouvez transmettre null comme valeur pour created_at si la colonne autorise nullable.

+0

@wenus Si ma réponse est votre solution, veuillez accepter ma réponse –