2017-04-01 11 views
0

テーブルをシードしようとすると、 '配列から文字列への変換'エラーが表示されます。テーブルをシードする際の文字列変換への配列

これは、エラーの出力です:

[Illuminate\Database\QueryException] 
Array to string conversion (SQL: insert into `reviews` (`user_id`, `name`, `location`, `header`, `comments`, `identifier`, `stars`, `privacy`, `actioned`, `appr 
oved`, `created_at`) values (10, Bradley Davis, Paulastad, Commodi quas expedita eum., Voluptas magni iusto nemo ea vitae harum quasi., 6c621319-c6ba-41c1-bb0b-696b602470 
ef, 5, 1, 0, 1, 2017-03-25 11:44:12)) 

表構造:

Schema::create('reviews', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('user_id'); 
    $table->string('name')->nullable(); 
    $table->string('location')->nullable(); 
    $table->string('header')->nullable(); 
    $table->string('comments')->nullable(); 
    $table->uuid('identifier'); 
    $table->integer('stars')->nullable(); 
    $table->boolean('privacy')->default('1'); 
    $table->boolean('actioned')->default('0'); 
    $table->boolean('approved')->default('0'); 
    $table->nullableTimestamps(); 
}); 

シード機能:

for ($i = 1; $i < 41; $i++) { 

    $name = User::where('id', $i + 9)->pluck('name')->all(); 
    $uuid = Uuid::generate(4); 

    $review = [ 
     'user_id' => $i + 9, 
     'name' => $name, 
     'location' => $faker->city, 
     'header' => $faker->sentence($nbWords = 3, $variableNbWords = true), 
     'comments' => $faker->text($maxNbChars = 50), 
     'identifier' => $uuid, 
     'stars' => [1, 2, 3, 4, 5][rand(0, count([1, 2, 3, 4, 5]) - 1)], 
     'privacy' => [1, 0][rand(0, count([1, 0]) - 1)], 
     'actioned' => [1, 0][rand(0, count([1, 0]) - 1)], 
     'approved' => [0, 1][rand(0, count([0, 1]) - 1)], 
     'created_at' => Carbon::now()->subWeeks(array_rand([2, 3, 4, 5, 6, 7], 1)) 
    ]; 
} 

DB::table('reviews')->insert($review); 

ますprint_r($レビュー):

Array 
(
    [user_id] => 10 
    [name] => Array 
     (
      [0] => David Robertson 
     ) 

    [location] => Lake Suzannechester 
    [header] => Repellendus aut alias exercitationem. 
    [comments] => Sunt non temporibus pariatur totam aut qui. 
    [identifier] => Webpatser\Uuid\Uuid Object 
     (
      [bytes:protected] => �a�?�IB��"�mLC� 
      [hex:protected] => 
      [string:protected] => d51961bb-3fcf-4942-a0d9-22a56d4c4392 
      [urn:protected] => 
      [version:protected] => 
      [variant:protected] => 
      [node:protected] => 
      [time:protected] => 
     ) 

    [stars] => 4 
    [privacy] => 1 
    [actioned] => 1 
    [approved] => 1 
    [created_at] => Carbon\Carbon Object 
     (
      [date] => 2017-03-04 12:04:01.225487 
      [timezone_type] => 3 
      [timezone] => UTC 
     ) 

) 
+1

'print_r($ review)'と参照してください。 –

+0

あなたの問題は「挿入」プロセスに属し、選択プロセスについて言及していますが、どのようにデータを挿入しますか? – hassan

+0

@u_mulder、説明に添付 – Ben

答えて

1

あなたは複数の問題がここにあります見ての通り、たとえば$nameの名前を保持していないが、それは配列を保持し、あなたが使用する必要があります。

$name = User::find($i + 9)->name; 

代わりに。

同様のものが$uuidです。一部のオブジェクトではなく文字列を返す必要があります。

はまた、私はこの部分を見ると:

'stars' => [1, 2, 3, 4, 5][rand(0, count([1, 2, 3, 4, 5]) - 1)], 
'privacy' => [1, 0][rand(0, count([1, 0]) - 1)], 
'actioned' => [1, 0][rand(0, count([1, 0]) - 1)], 
'approved' => [0, 1][rand(0, count([0, 1]) - 1)], 
'created_at' => Carbon::now()->subWeeks(array_rand([2, 3, 4, 5, 6, 7], 1)) 

それはあまりにも複雑です。また

'stars' => rand(1, 5), 
'privacy' => rand(0, 1), 
'actioned' => rand(0, 1), 
'approved' => rand(0, 1), 
'created_at' => Carbon::now()->subWeeks(rand(2, 7))->toDateTimeString(), 

DB::table('reviews')->insert($review); 

あなたは、ループの外にそれを使うのです

あなたはここで、このようなものを使用することができますか?そうであれば、それはあまり意味がありません。各ループの実行時に、再度設定します。しかし、ループの中で実行すると、多くのインサートを実行しないように最適化することもできます(明らかに41個のレコードではそれほど大きな違いはありませんが、何千ものことがあります)。

関連する問題