Красноречивые отношения не работают в почте - PullRequest
1 голос
/ 28 мая 2020

У меня есть модели Order, Product и OrderProduct. Заказ имеет отношение ownToMany с Продуктами, как в

public function products(){
        return $this->belongsToMany('App\Product')->withPivot('group');
}

Таким образом, пользователь создает заказ в базе данных:

$order = Order::create([
                    'order_id' => $payment->metadata->order_id,
                    'user_email' => $request ->email,
]);

, и мы также сохраняем продукты (обратите внимание, что у них одинаковые order_id as Order):

foreach (Cart::content() as $item){
                    OrderProduct::create([
                        'order_id' => $payment->metadata->order_id,
                        'product_id' =>$item->model->id,
                        'group' => $item->options->group,
                    ]);
                }

Итак, я хочу отправить электронное письмо с информацией о заказе и информацией о продуктах, полученной из базы данных, это находится в моем файле веб-перехватчика, и когда платеж будет оплачен, электронное письмо отправлено:

      //Let's send an email.
      $order = Order::where('order_id', '=', $payment->metadata->order_id)->firstOrFail();
      Mail::send (new OrderPlaced ($order));

В электронном письме отображается вся информация о заказе, такая как order_id и user_email, в моем представлении через выходные данные {{$ order-> order_id}} и {{$ order-> user_email}} но я не вижу продуктов, когда пытаюсь выполнить l oop через них с помощью:

@foreach ($order->products as $product) {{$product->name}} @endforeach

Он просто ничего не возвращает, нет ошибок, ничего. Dd ($ product) ничего не возвращает. Что я здесь упускаю?

Мои мысли:
1. Я не использую id в качестве первичного ключа, поэтому, возможно, мне нужно указать второй и третий аргументы в отношении ownToMany?
2. Переменная $ order, определенная ранее на почту, может я не могу наладить здесь отношения?

Ответы [ 2 ]

0 голосов
/ 31 мая 2020

Итак, я понял это, возможно, другие когда-нибудь столкнутся с той же проблемой: мои внешние ключи не были установлены правильно при миграции. Итак, исправление внешних ключей, а затем выполнение php artisan migrate refre sh решило это.

0 голосов
/ 28 мая 2020

, чтобы иметь данные о взаимосвязи продуктов, вы должны сначала загрузить их:

 $order = Order::with('products')->where('order_id', '=',$payment->metadata->order_id)->firstOrFail();

более подробную информацию о взаимосвязи загрузки в:

https://laravel.com/docs/7.x/eloquent-relationships#eager -загрузка

...