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;

}

Эту транзакцию я запускаю в контроллере, понимаю, что лучше так не делать, но уже хоть как-то запустить пытаюсь. Пожалуйста помогите, понять не могу, почему транзакция падает.


Ответы (0 шт):