@Dinesh_Chugtai

Множество INSERT запросов при использовании sync, как исправить?

При использовании метода sync(), создается множество запросов на вставку и удаление строки в бд. При этом за один раз может быть добавлено до 250 атрибутов. То по Eloquent создаст 250 INSERT запросов без объединения в один.
5fa14620ec05c151846582.png

В случае если сделать сначала проверку ID и после сделать detach и attach, то запрос объединяется в один
5fa14722110a5420907973.png

Используемая связь многие-ко-многим.

Вопрос, можно ли как-то достичь подобного у sync(), и с вашей точки зрения стоит ли вообще бороться с этим? Является ли нормальным подобная ситуация? Скорее всего я чего-то не понимаю.
  • Вопрос задан
  • 137 просмотров
Решения вопроса 1
@Dinesh_Chugtai Автор вопроса
В моем случае заморачиваться сильно не нужно, поэтому решил в качестве решения написать в основной модели Product функцию sync()

public function sync(string $relation, array $id) {
        $current_ids = $this->$relation()->allRelatedIds()->toArray();
        $new_ids = array_filter(array_pluck($id, 'id'));

        $this->$relation()->detach(array_diff($current_ids, $new_ids));
        $this->$relation()->attach(array_diff($new_ids, $current_ids));
    }


И в контроллере при обновлении информации, передаю отношения и их данные.

$product->sync('attributes', $request->get('attributes'));
$product->sync('categories', $request->get('categories'));
$product->sync('promotions', $request->get('promotions'));


В $request у связей мне приходят все столбцы, поэтому мне нужно получить только id.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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