php 将数量或其他参数传递给Laravel种子生成器

eivgtgni  于 2022-10-30  发布在  PHP
关注(0)|答案(6)|浏览(427)

我想传递一个参数来定义在数据库播种期间要创建多少条记录,而不必手动编辑工厂。
我在php artisan db:seed --class=UsersTableSeeder [using different args here]上尝试了不同的变体
我似乎找不到任何文档,所以我不知道它的功能是否存在。类似的东西存在吗?

class UsersTableSeeder extends Seeder
{
    public $limit = null;

    public function __construct($limit = 1) {
        $this->limit = $limit;
    }

    public function run()
    {
      echo $this->limit;
    }
}
gab6jxml

gab6jxml1#

无法直接指定参数。
如果要通过命令行指定参数,可以使用环境变量。

class UsersTableSeeder extends Seeder
{
    public function run()
    {
        $limit = env('SEEDER_LIMIT', 1);

        echo $this->limit;
    }
}

这样叫:

SEEDER_LIMIT=10 php artisan db:seed --class=UsersTableSeeder
wqsoz72f

wqsoz72f2#

据我所知,播种器没有参数,但你可以自己实现它。你可以创建一个接受参数的新命令,并使用这些附加参数以编程方式调用播种器。
类似这样的东西应该可以做到这一点:
第一个

nxagd54h

nxagd54h3#

您可以按以下方式进行设置:

public function run($count = 1)

然后你可以这样传递这个论证:

$this->call(ClientSeeder::class, false, ['count' => 500]);
7lrncoxx

7lrncoxx4#

您可以在呼叫任何其他播种者之前使用

// DatabaseSeeder.php

$limit = $this->command->ask('Please enter the limit for creating something !!');

然后您可以将该限制从“DatabaseSeeder”传递给任何其他种子,如下所示

//DatabaseSeeder.php

$this->call(AnyAdditionalSeeder::class, false, compact('limit'));

然后在“AnyAdditionalSeeder”中,可以向run()方法添加参数并将其命名为$limit,如下所示

public function run($limit)
{
   // you can access limit variable here
}

那么当您运行命令php artisan db:seed时,它将要求您提供限制:)

3z6pesqy

3z6pesqy5#

我解决方案:

// MemberSeeder.php (example for Members Table)

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Member as ModelsMember;

class MemberSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    static function run(int $nRec=1) {
        ModelsMember::factory()->times($nRec)->create();
    }
}

从.php文件调用

// Members.php
namespace App\Http\Livewire;

use Livewire\Component;
use App\Models\Member;
use Database\Seeders\MemberSeeder;

class Members extends Component
{
    public $members, $name, $email, $phone_number, $status, $member_id;
    public $bldModal = '';
    ...
    ...
    public function generaRecords() {
        MemberSeeder::run(2);
    }
}

用于创建表的架构

Schema::create('members', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->string('phone_number');
            $table->char('status',1);
            $table->timestamps();
        });

简短地说:

public function run() {

结束日期

static function run(int $nRec=1) {
tkclm6bt

tkclm6bt6#

从Laravel 8开始,你可以使用callWith将参数传递给种子函数的run方法。

class UsersTableSeeder extends Seeder
{    
    public function run($count = 1)
    {
        User::factory()->count($count)->create();
    }
}

然后您可以在其他播种机中使用这些播种机,如下所示:

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        $this->callWith(UsersTableSeeder::class, ['count' => 10]);
    }
}

请注意,您为callWith给予的参数数组是关联的,其键应该与run方法的参数匹配,因为该调用通常将通过Laravel的应用程序容器进行解析。

相关问题