Как создать laravel seeder с связью многие к многим из предварительного массива?

Чтобы создать Laravel seeder с связью многие ко многим из предварительного массива, вам потребуется использовать модели и фабрики данных.

Во-первых, необходимо создать миграции для таблиц, которые будут участвовать в связи многие ко многим. Например, если у вас есть две таблицы "users" и "roles", и каждому пользователю может соответствовать несколько ролей, а каждая роль может соответствовать нескольким пользователям, вы должны создать две миграции.

php artisan make:migration create_users_table --create=users
php artisan make:migration create_roles_table --create=roles

В каждой миграции вам потребуется определить структуру таблицы, а также определить связь между таблицами. Например:

public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->timestamps();
    });
}

public function up()
{
    Schema::create('roles', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->timestamps();
    });
    
    Schema::create('role_user', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->unsignedBigInteger('role_id');
        $table->unsignedBigInteger('user_id');
        $table->timestamps();
        
        $table->foreign('role_id')->references('id')->on('roles');
        $table->foreign('user_id')->references('id')->on('users');
    });
}

Затем нужно создать модели для каждой таблицы "User" и "Role". Для этого вам понадобится выполнить команду:

php artisan make:model User
php artisan make:model Role

После этого в каждой модели необходимо определить связи между таблицами. Например:

// User.php
public function roles()
{
    return $this->belongsToMany(Role::class);
}

// Role.php
public function users()
{
    return $this->belongsToMany(User::class);
}

Теперь вы можете создать фабрику данных для каждой модели. Фабрика данных поможет вам заполнить таблицы тестовыми данными. Например:

// UserFactory.php
$factory->define(User::class, function (FakerGenerator $faker) {
    return [
        'name' => $faker->name,
    ];
});

// RoleFactory.php
$factory->define(Role::class, function (FakerGenerator $faker) {
    return [
        'name' => $faker->jobTitle,
    ];
});

Теперь вам нужно создать seeder для заполнения данных в таблицах. В seeder вы можете использовать фабрики данных, чтобы создать связанные записи. Например:

// DatabaseSeeder.php
use AppUser;
use AppRole;
use IlluminateDatabaseSeeder;

class DatabaseSeeder extends Seeder
{
    public function run()
    {
        factory(User::class, 10)->create()->each(function ($user) {
            $user->roles()->saveMany(factory(Role::class, 3)->create());
        });
    }
}

Вы можете затем запустить команду artisan для запуска сида:

php artisan db:seed

При выполнении этой команды будет создано 10 пользователей, каждому из которых будет присвоено 3 случайные роли.

Таким образом, вы создали seeder с связью многие ко многим из предварительного массива, используя модели, миграции, фабрики данных и сидеры в Laravel.