2017-12-06 1 views
2

Hier ist meine DatabaseSeeder KlassencodeLaravel Datenbank Seeder Klasse

<?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,); 
    } 
} 

Mein php Artisan Befehl ist: php Handwerker db: Samen ich alle Seeder Klasse von einem commad migrieren möchten. aber ich kann es nicht tun. Bitte hilf mir.

Antwort

2

Die call() Methode erwartet ein Array, nicht eine Liste von Argumenten, so dass der richtige Aufruf ist

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

Der Schlüssel hier ist, dass Array seit der Version 5.5 von Laravel Rahmen akzeptiert wird. Zuvor, einschließlich der Version 5.4, die Sie jetzt verwenden, dürfen Sie nur den Namen einer einzelnen Klasse (Zeichenfolge) als Argument verwenden. Also, wenn Sie nicht auf 5.5 aktualisieren können, müssen Sie separat alle Klassen nennen, d.h .:

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

Docs for v5.4 und docs for v5.5

+0

aber das $ this-> Aufruf ([ AdminSeeder :: Klasse, CategorySeeder :: Klasse, UsersSeeder :: Klasse, ]); Prozess hat nicht funktioniert. Fehler beim Konvertieren von Array in Zeichenfolge Wie kann ich es lösen? –

+0

siehe bearbeitete Antwort. –

0

Sie auch jede Seeder separat aufrufen.

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

Bearbeiten für die downvoter kann die Funktion call Array oder Zeichenfolge akzeptieren.

/** 
* 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

Hi der Downvoter, können Sie Ihren Grund hier zeigen? Hast du es vorher versucht? Dies funktioniert gut von Laravel4.1 ~ Laravel5.5. –

Verwandte Themen