Codeigniter 4 Не работает транзакция
Всем привет!
Ребят, уже порядка 2,5 часов бьюсь над проблемой, происходит какая-то шляпа с транзакциями в Codeigniter 4 (версия фреймворка 4.1.1)
Пишу транзакцию для вставки данных в 2 таблицы и обновление третьей.
Если я закидываю в форму невалидные данные (валидация у меня идет через модель), то в 1ю таблицу ничего не вставляется, а во вторую вставляются данные и 3я таблица обновляется, почему такое происходит?
Функция для запуска транзакции, она у меня в контроллере пока что болтается, понимаю, что так лучше не делать, но пока что так.
public function addNewUserAndCode($data)
{
$userModel = new UserModel;
$CodeModel = new CodeModel;
$CodeUserModel = new CodeUserModel;
$db = \Config\Database::connect();
$db->transBegin();
//создаем юзера
$id = $userModel->insert($data);
//добавляем промо-код юзеру
$promoCodeUserModel->insert([
'user_id' => $id,
'code' => $data['code']
]);
//ставим отметку, что промо-код использован
$promoCodeModel->update($data['code'], ['used' => 1]);
$db->transComplete();
if ($db->transStatus() === FALSE) {
$db->transRollback();
log_message('debug', 'Транзакция упала');
return $this->fail('Не удалось добавить юзера.', 400);
} else {
$db->transCommit();
log_message('debug', 'Транзакция прошла');
}
}
Вот моделька для данных
namespace App\Models;
use CodeIgniter\Model;
class Users extends Model
{
protected $DBGroup = 'default';
protected $table = 'users';
protected $primaryKey = 'user_id';
protected $useAutoIncrement = true;
protected $insertID = 0;
protected $returnType = 'array';
protected $useSoftDelete = false;
protected $protectFields = true;
protected $allowedFields = [
'full_name', 'phone_user', 'inn_user', 'hospital_code', 'check_priz', 'winner', 'banned',
];
// Dates
protected $useTimestamps = true;
protected $dateFormat = 'datetime';
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $validationRules = [
'full_name' => 'required|min_length[3]|max_length[255]',
'phone_user' => 'required|is_unique[users.phone_user]|min_length[11]|max_length[11]|regex_match[/^((8|\+7)[\- ]?)?(\(?\d{3}\)?[\- ]?)?[\d\- ]{7,10}$/]|numeric',
'inn_user' => 'required|numeric|is_unique[users.inn_user]|min_length[12]|max_length[12]',
'hospital_code' => 'integer|max_length[5]'
];
protected $validationMessages = [];
protected $skipValidation = false;
}
Эту транзакцию я запускаю в контроллере, понимаю, что лучше так не делать, но уже хоть как-то запустить пытаюсь. Пожалуйста помогите, понять не могу, почему транзакция падает.