Фон / Информация о Laravel
Не стесняйтесь переходить к вопросу. У меня есть обработчик исключений, который отслеживает количество попыток сделать вызов API. Если вызов не удался, я увеличиваю количество попыток и сохраняю ошибку исключения в таблицу базы данных. Эта настройка позволяет нам запустить запланированную команду Artisan и прекратить попытки конкретного вызова, если он не проходит определенное количество раз. В настоящее время я использую метод updateOrCreate Laravel в обработчике:
try {
Vmi::createPurchaseOrder($purchaseOrder);
} catch (Exception $e) {
PurchaseOrder::updateOrCreate(
[
'invoice_id' => $purchaseOrder->invoice_id
],
[
'error' => $e->getMessage(),
'attempts' => DB::raw('attempts + 1'),
]
);
}
Соответствующие столбцы в таблице:
- invoice_id unsigned int
- текст ошибки
- пытается без знака int по умолчанию 0
В MySQL это, кажется, работает нормально, но я недавно переключил свои тесты на базу данных SQLite в памяти, которой не нравится тот факт, что оператор вставки пытается увеличить значение столбца. Я получаю следующую ошибку:
PDOException: SQLSTATE[HY000]: General error: 1 no such column: attempts
SQLite Вопрос
Есть ли способ увеличить значение столбца по умолчанию в SQLite при выполнении вставки?
-- I suppose this is kind of odd, but it works in MySQL and does not work in SQLite.
insert into purchase_orders (
invoice_id,
error,
attempts
) values (
1,
'Invalid customer ID',
attempts + 1
);
-- Of course, this works as expected.
update purchase_orders
set attempts = attempts + 1
where invoice_id = 1;