Обновление модели в try/catch: модель запоминает ошибочные значения обновления в catch ⇐ Php
Обновление модели в try/catch: модель запоминает ошибочные значения обновления в catch
У меня есть вложенные вызовы функций для обновления некоторых данных в базе данных, столбец, который я собираюсь обновить, уникален в базе данных, и он может быть обновлен с использованием повторяющегося значения. В этом случае я хочу пометить эту модель/строку как дублированную
р>
вот упрощенная версия моего кода без вызовов вложенных функций
public $defaultModel ; функция errorTest(){ $this->defaultModel = $inprogress = Process::where('inprogress', 1)->first(); пытаться { $inprogress->обновление( [ 'deployment_id' => 666, ]); } поймать (\Exception $Exception) { $this->defaultModel->update([ 'в процессе' => 0, 'ошибка'=>'дубликат' ]); } } когда я пытаюсь обновить модель с повторяющимся значением, я продолжаю получать страницу с ошибкой laravel
SQLSTATE[23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись «666» для ключа 'process_deployment_id_unique' сначала я подумал, что, возможно, мой try/catch не работает, и я не могу уловить ошибку, но, поигравшись, я обнаружил, что ошибка вызвана разделом catch
$this->defaultModel->update([ 'в процессе' => 0, 'ошибка'=>'дубликат' ]); хотя я не обновляю уникальный столбец (deployment_id) в catch , модель все еще запоминает значение, указанное в теле try, и пытается обновить deployment_id в подвох со значением 666
Сумасшествие в том, что я даже не использую одну и ту же переменную в разделе catch! они как будто ссылаются друг на друга
единственный способ обойти это — сделать что-то вроде
$model = $this->defaultModel->fresh(); $модель->обновить([ 'в процессе' => 0, 'ошибка'=>'дубликат' ]); есть идеи, почему это происходит?
пожалуйста, не предлагайте другой подход или метод, я знаю, что могу использовать другие методы.... мой вопрос о том, как модель запоминает данные попытки при обновлении catch
У меня есть вложенные вызовы функций для обновления некоторых данных в базе данных, столбец, который я собираюсь обновить, уникален в базе данных, и он может быть обновлен с использованием повторяющегося значения. В этом случае я хочу пометить эту модель/строку как дублированную
р>
вот упрощенная версия моего кода без вызовов вложенных функций
public $defaultModel ; функция errorTest(){ $this->defaultModel = $inprogress = Process::where('inprogress', 1)->first(); пытаться { $inprogress->обновление( [ 'deployment_id' => 666, ]); } поймать (\Exception $Exception) { $this->defaultModel->update([ 'в процессе' => 0, 'ошибка'=>'дубликат' ]); } } когда я пытаюсь обновить модель с повторяющимся значением, я продолжаю получать страницу с ошибкой laravel
SQLSTATE[23000]: нарушение ограничения целостности: 1062 Повторяющаяся запись «666» для ключа 'process_deployment_id_unique' сначала я подумал, что, возможно, мой try/catch не работает, и я не могу уловить ошибку, но, поигравшись, я обнаружил, что ошибка вызвана разделом catch
$this->defaultModel->update([ 'в процессе' => 0, 'ошибка'=>'дубликат' ]); хотя я не обновляю уникальный столбец (deployment_id) в catch , модель все еще запоминает значение, указанное в теле try, и пытается обновить deployment_id в подвох со значением 666
Сумасшествие в том, что я даже не использую одну и ту же переменную в разделе catch! они как будто ссылаются друг на друга
единственный способ обойти это — сделать что-то вроде
$model = $this->defaultModel->fresh(); $модель->обновить([ 'в процессе' => 0, 'ошибка'=>'дубликат' ]); есть идеи, почему это происходит?
пожалуйста, не предлагайте другой подход или метод, я знаю, что могу использовать другие методы.... мой вопрос о том, как модель запоминает данные попытки при обновлении catch
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
WPF: В чем разница между try...finally и try..catch..finally в WPF, MVVM? [закрыто]
Anonymous » » в форуме C# - 0 Ответы
- 42 Просмотры
-
Последнее сообщение Anonymous
-