@romicohen
Системный Архитектор

Можно ли в Eloquent сделать создание двух зависимых (hasOne) моделей в виде транзакции?

В документации Laravel рассматриваются либо транзакции с использованием фасада DB, либо сохранение связанных моделей (через save() или push()) с использованием уже существующей модели в отношении hasOne.

Но что если нужно создать ЛИБО две связанные модели, ЛИБО ни одной?

Т.е. допустим мы создали модель Main, а когда создавали дочернюю модель Props - что-то пошло не так, и теперь нужно удалить Main, потому что она нам без Props не нужна.

Есть ли в Laravel какие-то готовые методы для обработки такой ситуации?

Спасибо.

upd.: пример для понятности (немного поменяю пример из доки)

use App\Models\Post;

$post = Post::create();

$comment = $post->comments()->create([
    'message' => $request->message,
]);


Допустим нужен не просто $post, а именно $post с этим каментом, а без камента пост не нужен вовсе. И вот на моменте создания $post->comments()->create() что-то пошло не так - то ли данные в реквесте не те пришли, то ли еще чего, в общем, exception - но $post-то уже создан - а он без comment - НЕ нужен. Вот такая ситуация.
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
@romicohen Автор вопроса
Системный Архитектор
т.е. в транзакцию можно заворачивать НЕ ТОЛЬКО методы фасада DB?


ответ от Алексей Уколов

Естественно. Eloquent же не через магию строки в таблицы вставляет.

***

Выходит так, что вот это:

DB::transaction(function () {

$post = Post::create();

$comment = $post->comments()->create([
    'message' => $request->message,
]);

});


тоже должно работать :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы