пальцах:
$product->properties()->updateOrCreate($properties);
где
properties()
- релейшин,
$properties
- массив вида
[ ['id' =>1, 'prop' => 'prop], ['id' => 2, 'prop' => prop2] ]
Sync не подходит?
"Дедовским" способом - форыч 😅 $props = [ ['id' =>1, 'prop' => 'prop], ['id' => 2, 'prop' => prop2] ]; foreach($props as $prop) { $product->properties()->updateOrCreate($prop); }
Кстати, обрати внимание на механику работы метода create() у моделей: create($first=[], $second=[]) Если ты передашь массив первым параметром, это будет аналог select 1 from table where id1='value1' and id2='value2'... А если тебе надо сравнить именно по идентификатору и если такой записи нет, то остальные данные надо передавать вторым параметром. Вот пример из моего кода: return Car::firstOrCreate(compact('vin'), compact('mark_id', 'model_id', 'modification_id', 'price', 'year')); То бишь, если в таблице нет авто с указанным VIN-номером, тогда создаст запись, иначе вернет модель найденной. С функцией compact() уже знаком? https://laravel.com/docs/5.5/eloquent#other-creation-methods
Слушай, могу ошибаться, но в доке нашел: https://laravel.com/docs/5.5/eloquent-relationships#the-create-method $post = App\Post::find(1); $post->comments()->createMany([ ['message' => 'A new comment.'], ['message' => 'Another new comment.'], ]); Твой случай?
Обсуждают сегодня