Есть две таблицы: User
---------
|id|name|
|10|John|
---------
Article
--------------------
|id|user_id| article|
|21| 10|testName|
|22| 10| testVal|
--------------------
В реквесте приходит массив артиклов:
article[]
article[1][id] = "21"
article[1][article] = "first"
article[2][article] = "second"
Нужно положить их в таблицу, чтобы записи которые есть(если в реквесте пришел id) обновились, у которых нет id создать, а которые не пришли в реквесте удалилить. На выходе должна получится таблица Article такого вида:
--------------------
|id|user_id| article|
|21| 10| first|
|23| 10| second|
--------------------
Вот набросал свою реализацию, если я всё правильно понял, то должно отработать без ошибок:
//Вот так выглядит ваш POST как я понял
$_POST['articles'] = [
1 => [
'id' => 21,
'article' => 'first'
],
2 => [
'article' => 'second'
]
];
Вот так мы его обрабатываем, собираем записи и обновляем данные через метод sync
:
$articles = [];
foreach ($_POST['articles'] as $data) {
$attributes = [
'article' => $data['article']
];
//Проверяем именно так, всякие updateOrCreate и т.п. не подойдут потому что id есть не всегда у вас в запросе и будет ошибка
if (array_key_exists('id', $data)) {
$article = App\Article::where('id', $data['id'])
->update($attributes);
} else {
$article = App\Article::create($attributes);
}
array_push($articles, $article->id);
}
$user = App\User::find(1);
//Метод sync добавит записи которых не было и удалит все те что не указаны в массиве
$user->articles()->sync($articles);
Так же вы хотели удалять все записи что не были в запросе, это можно сделать вот так:
//Удаляем все записи, которых нет в форме
App\Article::whereNotIn('id', $articles)->delete();
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Подскажите, в чём может быть проблема? В админке есть отдельная страница выбора файла csv или xlsx для импорта новых пользователейВ цикле берётся...