Suche…


Seeder ausführen

Sie können Ihren neuen Seeder der DatabaseSeeder-Klasse hinzufügen.

    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UserTableSeeder::class);
    }

Verwenden Sie den Befehl Artisan, um einen Datenbank-Seeder auszuführen

php artisan db:seed

Dadurch wird die DatabaseSeeder-Klasse ausgeführt. Sie können auch die Option --class= um manuell anzugeben, welche Sämaschine ausgeführt werden soll.

* Beachten Sie, dass Sie möglicherweise Composer dumpautoload ausführen müssen, wenn Ihre Seeder-Klasse nicht gefunden werden kann. Dies geschieht normalerweise, wenn Sie manuell eine Seeder-Klasse erstellen, anstatt den Befehl handwerklich zu verwenden.

Einen Samen erstellen

Datenbank-Seeds werden im Verzeichnis / database / seeds gespeichert. Sie können einen Samen mit einem Artisan-Befehl erstellen.

php artisan make:seed UserTableSeeder

Alternativ können Sie eine neue Klasse erstellen, die Illuminate\Database\Seeder . Die Klasse muss eine öffentliche Funktion namens run() .

Daten mit einem Seeder einfügen

Sie können Modelle in einer Sämaschine referenzieren.

use DB;
use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

    public function run(){
        # Remove all existing entrie
        DB::table('users')->delete() ;
        User::create([
            'name' => 'Admin',
            'email' => '[email protected]',
            'password' => Hash::make('password')
        ]);

    }
}

Einfügen von Daten mit einer Modellfabrik

Möglicherweise möchten Sie Modellfabriken in Ihrem Samen verwenden. Dadurch werden 3 neue Benutzer erstellt.

use App\Models\User;

class UserTableSeeder extends Illuminate\Database\Seeder{

    public function run(){
        factory(User::class)->times(3)->create();    
    }
}

Möglicherweise möchten Sie auch bestimmte Felder in Ihrem Seeding definieren, beispielsweise ein Kennwort. Dadurch werden 3 Benutzer mit demselben Passwort erstellt.

factory(User::class)->times(3)->create(['password' => '123456']);    

Seeding mit MySQL Dump

Folgen Sie dem vorherigen Beispiel zum Erstellen eines Seed. In diesem Beispiel wird ein MySQL-Dump zum Seeding einer Tabelle in der Projektdatenbank verwendet. Die Tabelle muss vor dem Seeding erstellt werden.

<?php

use Illuminate\Database\Seeder;

class UserTableSeeder extends Seeder
{

    /**
     * Run the database seeds.
     *
     * @return void
     */
     public function run()
     {
         $sql = file_get_contents(database_path() . '/seeds/users.sql');
    
         DB::statement($sql);
      }
}

Unser $ sql wird der Inhalt unseres user.sql-Dumps sein. Der Dump sollte eine INSERT INTO-Anweisung haben. Es liegt an Ihnen, wo Sie Ihre Dumps aufbewahren. Im obigen Beispiel wird es im Projektverzeichnis \database\seeds gespeichert. Verwenden der Hilfsfunktion database_path() laravel und Anhängen des Verzeichnis- und Dateinamens des Speicherauszugs.

INSERT INTO `users` (`id`, `name`, `email`, `password`, `remember_token`, `created_at`, `updated_at`) VALUES
(1, 'Jane', '[email protected]', 'superSecret', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00'),
(2, 'John', '[email protected]', 'sup3rS3cr3t', NULL, '2016-07-21 00:00:00', '2016-07-21 00:00:00');

DB::statement($sql) führt die Einfügungen aus, sobald der Seeder ausgeführt wird. Wie in den vorherigen Beispielen können Sie den UserTableSeeder in die von laravel bereitgestellte DatabaseSeeder Klasse einfügen:

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->call(UserTableSeeder::class);
    }
}

und von CLI im Projektverzeichnis php artisan db:seed ausführen. Oder Sie können den Seeder für eine einzelne Klasse mit php artisan db:seed --class=UsersTableSeeder

Verwenden von Faker und ModelFactories zum Generieren von Seeds

1) EINFACHE WEGE

Datenbankgesteuerte Anwendungen benötigen häufig Daten, die zu Test- und Demozwecken in das System eingebettet sind.

Um solche Daten zu erstellen, erstellen Sie zuerst die Seeder-Klasse

ProductTableSeeder

use Faker\Factory as Faker;
use App\Product;

class ProductTableSeeder extends DatabaseSeeder {

public function run()
{
    $faker = $this->getFaker();

    for ($i = 0; $i < 10; $i++)
    {
        $name =         $faker->word;
        $image =        $faker->imageUrl;
       
        Modelname::create([
            'name' => $name,
            'image' => $image,
        ]);
      }
    }
 }

Um eine Seeder-Klasse ausführen zu können, müssen Sie sie von der DatabaseSeeder-Klasse aus aufrufen. Geben Sie einfach den Namen der Seeder an, die Sie ausführen möchten:

benutze Illuminate \ Database \ Seeder;

class DatabaseSeeder extends Seeder {

    protected $faker;

    public function getFaker() {
        if (empty($this->faker)) {
            $faker = Faker\Factory::create();
            $faker->addProvider(new Faker\Provider\Base($faker));
            $faker->addProvider(new Faker\Provider\Lorem($faker));
        }
        return $this->faker = $faker;
    }
    public function run() {
        $this->call(ProductTableSeeder::class);
    }
}

Vergessen Sie nicht, $ composer dump-autoload auszuführen, nachdem Sie den Seeder erstellt haben, da sie nicht automatisch vom Composer geladen werden (es sei denn, Sie erstellen den Seeder mit dem handwerklichen Befehl $ php artisan make:seeder Name )

Jetzt können Sie mit diesem Handwerker-Befehl säen, indem Sie diesen Befehl php artisan db:seed

2) VERWENDUNG von Modellfabriken

Zunächst definieren Sie einen Standardsatz von Attributen für jedes Modell in App/database/factories/ModelFactory.php

Ein Beispiel für ein User-Modell: So sieht eine ModelFactory aus

$factory->define(App\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->name,
        'email' => $faker->email,
        'password' => bcrypt(str_random(10)),
        'remember_token' => str_random(10),
    ];
});

Erstellen Sie jetzt einen Tabellen-Seeder- php artisan make:seeder UsersTableSeeder

Und füge das hinzu

public function run()
{
    factory(App\User::class, 100)->create()
}

Fügen Sie diese dann dem DatabaseSeeder

public function run()
{
    $this->call(UsersTableSeeder::class);
}

Dadurch wird die Tabelle mit 100 Datensätzen belegt.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow