Laravel сохранить модель с отношениями сразу - PullRequest
1 голос
/ 13 января 2020

У меня есть заказ со многими продуктами.

Затем я наблюдаю за созданным заказом и запускаю электронное письмо с подтверждением заказа после сохранения.

У меня проблема в том, что у меня есть сделать $order->products()->saveMany($products) после того, как я сохраню объект $order. Это означает, что электронное письмо с подтверждением отправляется перед сохранением соответствующих продуктов, поэтому звонок по номеру $order->products() в шаблоне электронной почты пуст.

Такое ощущение, что я что-то здесь упустил, нет ли способа передать продукты в первый $order->save(), поэтому весь заказ создается сразу.

Ответы [ 2 ]

1 голос
/ 13 января 2020

Я почти уверен, что это невозможно, поскольку заказ имеет , который нужно создать, прежде чем вы сможете прикрепить продукты (по крайней мере, для автоинкрементных первичных ключей).

Лично я бы добавить метод для прикрепления продуктов ($order->setProducts($products)), который прикрепляет их, а также отправляет почту. Вы можете даже проверить свойство wasRecentlyCreated, чтобы убедиться, что письмо не отправлено, если вам случится снова вызвать этот метод для существующего заказа.

bool $wasRecentlyCreated Указывает, была ли модель вставлена ​​в течение текущего жизненного цикла запроса.

0 голосов
/ 13 января 2020

Сначала

$order->save()

А затем

$order->products()->saveMany($products)

последнее, что вы должны сделать:

//email sending codes
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...