Laravel数据库播种机类

时间:2017-12-06 07:35:11

标签: php database laravel-5.4

这是我的DatabaseSeeder类代码

<?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 Artisan Command是:php artisan db:seed 我想通过一个commad迁移所有Seeder类。但我不能这样做。请帮帮我。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你也分别给每个播种者打电话。

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

编辑downvoter 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;
}
相关问题