Задать вопрос
alex4answ
@alex4answ

Почему в бд добавляется 2 записи вместо 1?

Добрый день, не получается отловить двойную запись в бд.

В контроллере:
VisitService::newVisit();

в Визит сервисе:
public static function newVisit($page_id){
            $model = new Statistics();
            $model->load(self::getPlaceholder($page_id), '');
            self::saveVisit($model);
    }
private static function saveVisit($model){
        if($model->validate() && $model->save()){
            \Yii::debug('сохранение визита'); // пытаюсь посмотреть сколько раз будет в логах
            return true;
        }
        return false;
    }


В итоге, метод newVisit вызывается 1 раз, в 1 месте, в логах "сохранение визита" тоже 1 раз.
В дебагере запросов такая запись только 1, Duplicated у нее тоже = 1:
INSERT INTO `statistics` (`page_id`, `type`, `ip`, `date`) VALUES (42, 0, '127.0.0.1', NOW())


Причем записываются записи подряд с разницей в 2 секунды, редиректов и прочего не обнаружил.

Подскажите пожалуйста, куда смотреть и что вообще может быть?
  • Вопрос задан
  • 83 просмотра
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
VladimirAndreev
@VladimirAndreev
php web dev
а первичный ключ у таблицы есть?
вообще, инсерт или апдейт - определяется на основе null === $_oldAttributes
он заполняется при insert если в таблице есть ПК.

если ПК нет и его нельзя добавить - для модели нужно определить свой getIsNewRecord() и какой-нибудь флаг хранить, как дополнительное условие.
Ответ написан
Ваш ответ на вопрос

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

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