2017-04-01 1 views
0

Beim Versuch, eine Tabelle zu erstellen, wird ein Fehler bei der Array-String-Konvertierung angezeigt.Konvertierung von Array zu String beim Seeding einer Tabelle

Dies ist die Ausgabe des Fehlers:

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

Tabellenstruktur:

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(); 
}); 

Seed-Funktion:

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 ($ Bewertung):

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)' und sehen. –

+0

Ihr Problem gehört zum Einfügungsprozess und Sie erwähnen einen Auswahlprozess, wie fügen Sie Ihre Daten ein? – hassan

+0

@u_mulder, an die Beschreibung angehängt – Ben

Antwort

1

Wie Sie sehen, gibt es hier mehrere Probleme, zum Beispiel $name nicht Namen nicht halten, aber es hält das Array, sollten Sie verwenden:

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

statt.

Ähnlich ist für $uuid - es sollte Zeichenfolge statt irgendeines Objekts zurückgeben.

Auch wenn ich mir diesen Teil:

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

es viel zu kompliziert ist.

könnten Sie hier so etwas wie dieses:

'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(), 

auch:

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

verwenden Sie es außerhalb der Schleife? Wenn dies der Fall ist, macht es wenig Sinn, da Sie es in jedem Loop-Lauf erneut einstellen. Wenn Sie es jedoch innerhalb einer Schleife tun, könnten Sie dies auch so optimieren, dass nicht so viele Einfügungen ausgeführt werden (offensichtlich wird es für 41 Datensätze keinen großen Unterschied machen, aber für Tausende würde es ausreichen).