В общем, столкнулся с такой проблемой. Есть кусок кода:
$validation = Booking::findByUserProduct( $user_id, $product_id );
$answer = Booking::queryAddReturn($validation, $product_id, $way, $user_id, $count);
В него передаются параметры для записи в БД. Сначала происходит проверка, не записана ли информация в БД, чтобы не было дублей. Если есть, то $validation приравнивается false, иначе - true. Затем отправляется запрос (в методе Booking::queryAddReturn ). В нём обрабатывается $validation, в зависимости от него запись создаётся или нет. Вместе с этим пользователю выдаётся соответствующее сообщение.
В чём проблема: такое ощущение, что php отдаёт сначала второй запрос (на запись в БД), а затем - первый (на проверку существования записи). Если я уберу вторую строчку, то var_dump($validation) выдаёт bool(true), то есть записи нет. Если я её верну, то bool(false).
Код Booking::findByUserProduct:
public static function findByUserProduct( $user_id, $product_id ) {
$sql = 'SELECT * FROM booking WHERE `user_id`=:user_id AND `product_id`=:product_id';
$res = \Yii::$app->db->createCommand($sql)
->bindValue(':user_id', (int) $user_id)
->bindValue(':product_id', (int) $product_id)
->queryall();
return count($res) === 0;
}
Код Booking::queryAddReturn:
public static function queryAddReturn($validation, $product_id, $way, $user_id, $count) {
if( $validation !== true ) {
return '<p class="text-light">Ошибка: товар уже заказан</p>';
}
else{
if( Booking::addOne( $product_id, $way, $user_id, $count ) )
return '<p class="text-light">Заказ успешно принят</p>';
return '<p class="text-light">Ошибка: не удалось обработать заявку</p>';
}
}
Причём в findByUserProduct var_dump($res) выдаёт массив с теми самыми значениями $user_id и $product_id, которые передавались.
В чём может быть причина?