@sergey228_G

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

На проекте был следующий массив -

627ac4e4cb430093195277.jpeg

была следующая страница
627ac215346a5649436882.jpeg

я все это перенес в таблицы
часть данных по типу - интернет я создал сид на добавление и все ок

627ac1b7983f0869087566.jpeg

нужно добавить также данные с связями
у типов устройств и фирм связь - многие к многим -
у фирм и моделей - один к многим

но я не знаю как создать сид который заполнит
1)фирмы
2) типы устройств
3) модели
вместе с связями )

Мне нужно создать сид который пройдется по массиву
будет брать тип устройства - добавлять его
по типу устройства
будет добавлять доступные ему фирмы
и по фирме будет добавлять доступные модели для данной фирмы с данным типом устройства

я даже не понимаю куда положить этот массив )

мне предложили знакомые создать отдельно фирмы , модели и типы устройств
и потом пройтись по массиву и связать

но если делать это потом - то это получается на каждую запись нужно будет делать поиск в таблицах чтобы узнать айди записи - чтобы потом связать это
и это бред уже какой-то )
подскажите пожалуйста ) я не справляюсь
  • Вопрос задан
  • 117 просмотров
Пригласить эксперта
Ответы на вопрос 1
toratoda
@toratoda
Так можно загрузить массив с скриншота.
$data = [
    'фирма 1' => [
        'модель 1.1',
        'модель 1.2',
    ],
    'фирма 2' => [
        'модель 2.1',
        'модель 2.2',
    ],
];


foreach ($data as $firm_name => $models) {
    $firm = new Firm();
    $firm->name = $firm_name;
    $firm->save();

    $firm->models()->saveMany(array_map(function(string $model_name) {
        $model = new Model();
        $model->name = $model_name;
        return $model;
    }, $models));
}

Желательно делать все это одной транзакцией чтоб не было битых данных. Если данных очень много то следует загружать их частями.
По схеме БД: я бы посоветовал устройство связывать с моделью, а не с фирмой . потому что у тебя может быть intel процессор и intel видеокарта, но не может быть видеокарты Core i9...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы