2017-10-23 3 views
1

Ich versuche, eine Tabelle mit relationalen Daten in einer Laravel 5.5-Anwendung zu seed.Seeding relationale Daten in Laravel beredten Datenbank Seeder/Fabrik - Typ Fehler - Arg 1 sollte beredten Model - Sammlung gegeben

Ich habe diese beiden Tabellen/Modelle:

  • Benutzer
  • Frage

Auf der app \ User.php Modelldatei; Ich habe folgende hasMany Beziehung:

public function questions() 
{ 
    return $this->hasMany(Question::class); 
} 

Und hier meine Datenbank/Fabriken/QuestionFactory.php

<?php 

use Faker\Generator as Faker; 

$factory->define(App\Question::class, function (Faker $faker) { 
    static $user_id; 

    return [ 
     'user_id' => $user_id, 
     'subject' => $faker->sentence(15), 
     'body' => $faker->paragraph(3) 
    ]; 
}); 

und meine Datenbank/Fabriken/UserFactory.php

<?php 

use Faker\Generator as Faker; 

$factory->define(App\User::class, function (Faker $faker) { 
    static $password; 

    return [ 
     'name' => $faker->name, 
     'email' => $faker->unique()->safeEmail, 
     'password' => $password ?: $password = bcrypt('123456'), 
     'remember_token' => str_random(10), 
    ]; 
}); 

Angesichts der oben genannten; Ich versuche, alles in meiner Blinddaten Seeder wie diese zu verwenden:

class DummyDataSeeder extends Seeder 
{ 
    public function run() 
    { 
     // Seed dummy users 
     factory(App\User::class, 10)->create()->each(function($user) 
     { 
      // With dummy questions 
      $user->questions()->save(factory(App\Question::class, 3)->make()); 
     }); 
    } 
} 

The goal was to create 10 dummy users, and for each users to have 3 questions each.

Wenn ich die Datenbank mit dem obigen Setup-Samen; Ich erhalte die folgende Fehlermeldung:

[Symfony\Component\Debug\Exception\FatalThrowableError] Type error: Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::save() must be an instance of Illuminate\Database\Eloquent\Model, instance of Illuminate\Database\Eloquent\Collection given, called in C:\xampp\htdocs\myapp.local\database\seeds\DummyDataSeeder.php on line 18

+0

Ich denke Statt 'save' Sie verwenden müssen, um' saveMany' auf mehrere Datensätze für jede iteration.Check meine Antwort unten. –

Antwort

2

wie diese versuchen:

factory(App\User::class, 10)->create()->each(function ($u) { 
    $u->questions()->saveMany(factory(App\Question::class, 3)->make());    
}); 
+0

Danke, Das hat den Trick gemacht. – Latheesan

+0

Glücklich, Ihnen zu helfen, Wenn es funktioniert, dann können Sie die Antwort annehmen –

+0

Ich musste 10 Minuten warten, sowieso wird es jetzt akzeptiert. – Latheesan

Verwandte Themen