2017-12-06 7 views
2

は、ここに私のDatabaseSeederクラスコードであるLaravelデータベースシーダークラス

<?php 

use Illuminate\Database\Seeder; 
use Illuminate\Database\Eloquent\Model; 

class DatabaseSeeder extends Seeder 
{ 
    /** 
    * Run the database seeds. 
    * 
    * @return void 
    */ 
    public function run() 
    { 


     $this->call(
      AdminSeeder::class, 
      CategorySeeder::class, 
      UsersSeeder::class,); 
    } 
} 

マイPHP職人コマンドは次のとおりです。PHPの職人デシベル:シード私は1 commadにより、すべてのシーダクラスを移行したい 。私はそれをすることはできません。 plsは私を助けます。

答えて

2

call()方法は、配列ではなく、引数のリストを想定し、適切な呼び出しが

$this->call([ 
     AdminSeeder::class, 
     CategorySeeder::class, 
     UsersSeeder::class, 
    ]); 

あるので、ここで重要なのは、配列がLaravelフレームワークのバージョン5.5以降受け入れられていることです。以前はv5.4を含めて現在使用していますが、引数として許可される単一クラス名(文字列)のみです。ですから、5.5にアップグレードすることができないならば、あなたは別に、すべてのクラスを呼び出す必要がある、すなわち:

$cls = [ 
     AdminSeeder::class, 
     CategorySeeder::class, 
     UsersSeeder::class, 
    ]; 
    foreach ($cls as $c) { 
     $this->call($c); 
    } 

Docs for v5.4docs for v5.5

+0

これます$ this->コール([ AdminSeeder ::クラス、 CategorySeeder ::クラス、 UsersSeeder ::クラス、 ]);プロセスが機能しませんでした。配列から文字列への変換エラーです。どうすれば解決できますか? –

+0

編集された回答を参照してください。 –

0

あなたはまた、別々に各シーダを呼び出します。 downvoterため

$this->call('AdminSeeder'); 
$this->call('CategorySeeder'); 
$this->call('UsersSeeder'); 

編集、call機能配列や文字列を受け入れることができます。

/** 
* Seed the given connection from the given path. 
* 
* @param array|string $class 
* @param bool $silent 
* @return $this 
*/ 
public function call($class, $silent = false) 
{ 
    $classes = Arr::wrap($class); 
    foreach ($classes as $class) { 
     if ($silent === false && isset($this->command)) { 
      $this->command->getOutput()->writeln("<info>Seeding:</info> $class"); 
     } 
     $this->resolve($class)->__invoke(); 
    } 
    return $this; 
} 
+0

こんにちはdownvoter、ここにあなたの理由を示すことができますか? downvoteの前にそれを試してみましたか?これはlaravel4.1〜laravel5.5からうまくいきます。 –