Итак, у вас есть модель User (для аутентификации), модель Kid для деталей о детях, а затем модель Superpower для деталей о сверхдержавах.
У вас есть два варианта, которые я вижу.Первый вариант требует большего структурного изменения, но более простой логики контроллера, в то время как другой более тяжелый в контроллере.
1 -
Создайте отношения «многие ко многим» с детьми и сверхдержавами.Это может не подходить к вашему случаю использования, если пользователи могут добавлять новые суперспособности, которые доступны для просмотра всем остальным пользователям.Это будет включать в себя сводную таблицу, которая будет хранить каждое соединение между ребенком и сверхдержавой.
При возврате массива сверхдержав для ссылки на ребенка (скажем, список флажков отправляется в форме), вы можете использовать метод отношений sync
:
$kid->superpowers->sync($superpowers);
2 -
Если вы хотите сохранить ваши отношения в основном такими, как они есть, я рекомендую хотя бы изменить структуру таблицы, предложенную вами в вашем вопросе, чтобы поле name
было kid_id
.Это было бы более стандартным, так что ребенок имел бы отношение hasMany к сверхдержавам, а супердержава имела бы отношение к ребенку.
Тогда вы можете позвонить:
foreach ($request->superpowers as $superpower) {
$superpowers[] = ['superpower' => $superpower];
}
$kid->superpowers->delete();
$kid->superpowers->createMany($superpowers);
Заметным недостатком этого подхода является то, что данные сначала удаляются для синхронизации.Полученные created_at
временные метки были бы тогда неправильными.