Почему save() срабытывает один раз?

есть массив $catID
вот его значения

array(2) { 
    	[0]=> string(1) "1" 
    	[1]=> string(1) "2"
    	 }


пытаюсь запустить его для сохранения через foreach вот код



foreach($catID as $cat){
                     $catSerial->id_cat=$cat;
                     $catSerial->id_serial=$model->id;
                     $catSerial->save();
                 }


проблема в том что save() отрабатывается один раз последний почему ? И как заставить работать дважды.
  • Вопрос задан
  • 160 просмотров
Решения вопроса 1
333Serega333
@333Serega333
333Serega333
Что хотелось бы сказать в первую очередь. Вызов метода save() влечет за собой выполнение запроса в базу. Вы же вызываете этот метод в цикле, и это ну вообще не правильно. Я бы рекомендовал сделать нужный функционал другим способом.
Запросы sql в цикле делать нельзя !!!
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@kryvel
Системный администратор
Смысле он срабатывает один раз?
Происходит только запись последнего элемента? или записываются все но только в конце?
какой primarykey у вас в catSerial ?
Ответ написан
mitaichik
@mitaichik
У вас скорее всего ошибка в логике приведенного кода. Такое чувство, что вы хотите создать 2 строки в БД, но приведенный код сделает одну, а затем изменит ее. Вы б лучше написали что вы хотите сделать.

Так же следует учесть: save вызывается в любом случае, но не всегда он будет сохранять. Например, если не прошла валидация, он не будет пытаться сохранить невалидную модель в базу.

Вполне возможно что у вас есть уникальный валидатор по cat_id и строка с таким id уже существует - save не удет сохранять а просто вернет false.

Если делаешь что-то критичное, результат save всегда нужно проверять! И либо бросать эксепшн, либо как-то это обрабатывать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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