2017-12-02 7 views
3

私のlaravelバージョンはLaravel Framework 5.5.22です。私はすべてのuser一部tasksを割り当てたい私のTaskTableSeederクラス内ユーザーに属しているタスクを持つシードデータベース

Schema::create('tasks', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->string('name'); 
     $table->integer('user_id')->unsigned(); 
     $table->timestamps(); 
    }); 

は私が仕事のために、次のスキーマを持っています。 私が試したものを以下を参照してください。

class TaskTableSeeder extends Seeder 
{ 

    public function run() 
    { 
     $faker = Faker\Factory::create(); 
     $limit = 25; 

     $userIds = DB::table('users')->get('id');  

     for ($i = 0; $i < $limit; $i++) { 
      DB::table('tasks')->insert([ 
       'name' => $faker->sentence(), 
       'user_id' => $faker->randomElement($userIds), 
      ]); 
     } 
    } 
} 

しかし、私は次のエラーを取得する:

Seeding: UserTableSeeder 
Seeding: TaskTableSeeder 

In Grammar.php line 124: 

    Type error: Argument 1 passed to Illuminate\Database\Grammar::columnize() must be of the type array, string given, call 
    ed in C:\Users\marcus\Desktop\Coding Projects\demo_laravel_todo\vendor\laravel\framework\src\Illuminate\Database\Query\ 
    Grammars\Grammar.php on line 131 

私が間違っているの何任意の提案ですか?

答えて

1

文字列をrandomElement()に渡すため、エラーが発生しています。配列をrandomElement()に渡す必要があるので、pluck()toArray()を使用してください:

$userIds = DB::table('users')->pluck('id')->toArray();  
2

あなたが代わりにあなたがdocs

にチェック例以下

$insertData = array(); 
    for ($i = 0; $i < $limit; $i++) { 
     $insertData[] = [ 
      'name' => $faker->sentence(), 
      'user_id' => $faker->randomElement($userIds), 
     ]; 
    } 
    DB::table('tasks')->insert($insertData); 

for ($i = 0; $i < $limit; $i++) { 
     DB::table('tasks')->insert([ 
      'name' => $faker->sentence(), 
      'user_id' => $faker->randomElement($userIds), 
     ]); 
    } 

からコードinsert機能.Changeでのみ単一のアレイを渡す配列の配列を渡すことができます

DB::table('users')->insert([ ['email' => '[email protected]', 'votes' => 0], ['email' => '[email protected]', 'votes' => 0] ]); 
関連する問題