Я использую Laravel Framework 5.6.39, и я получаю эту проблему при попытке сохранить в моей базе данных PostgreSQL 12.1. Я изо всех сил стараюсь объяснить мою проблему, но я создал пример того, что происходит ниже.
У меня есть 2 таблицы, назовем их Foo и Bar, и их Модели можно называть одинаковыми. Внутри моего контроллера Foo у меня есть функция, которая принимает запрос и обновляет запись Foo. У меня есть настройка Observer для Foo, которая должна создавать новую запись в таблице Bar при обновлении foo. Эта проблема, с которой я сталкиваюсь, заключается в том, что создается новая запись для Bar, поскольку я могу вернуть коллекцию для этой записи, а также использовать некоторые функции отношений, которые я настроил для Bar, но она не создается в моем Postgres база данных. Ошибки не возвращаются. Я столкнулся с такой проблемой раньше, как показано в коде ниже, но мне удалось решить, вызвав DB::commit
. Я пытался сделать такой же вызов в моем Foo Observer, но, похоже, ничего не работает :( ...
Если кто-нибудь может просмотреть созданный ниже пример и помочь мне решить его, я был бы очень признателен!
Спасибо.
Внутри моего контроллера у меня есть следующая функция: Foo Controller:
public function fooMethod(Request $request) {
try {
// Start transaction
\DB::beginTransaction();
// ** only showing this part since I needed this to fix a similar issue
// but Now this doesn't work in my new scenario
// ...
// If it does't exisit call another function to create it.
if(!request->id) {
$newFoo = $this->anotherFooMethod();
// Needed to add this DB::commit to fix a similar t
\DB::commit();
// Send back new created file
return $this->sendResponse($newFoo);
}else {
// Foo exisit update the record.
$foo = Foo::find($request->id);
$foo->item = true;
$foo->save(); // this update triggers my FooObserver which listens for update
}
// commit transaction
\DB::commit();
}catch(\Throwable $exc) {
// If error processing rollback
\DB::rollBack();
return $this->sendResponse(null, false);
}
}
Это пример моего класса FooObserver:
public function updated(Foo $foo) {
// must be logged in to perform action
if(!auth()) {
return;
}
$bar = new Bar();
$bar->barColumn = true;
// Store FK from foo
$bar->foo_id = $foo->id;
$bar->save(); // here is my issue ...
// Right here I am able to access the new record of $bar and even use the
// Model relationship I have setup for Bar
// But the record does not exisit in my Postgres database.
// I have tried using the DB::commit here and re-calling it in my Foo Controller but still nothing
}