雄辩的关系在邮件中不起作用

我有一个订单、产品和订单产品模型。Order 与 Products 有 belongsToMany 关系,如


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):


foreach (Cart::content() as $item){

                    OrderProduct::create([

                        'order_id' => $payment->metadata->order_id,

                        'product_id' =>$item->model->id,

                        'group' => $item->options->group,

                    ]);

                }

那么我想发送一封电子邮件,其中包含从数据库中检索到的订单信息和产品信息,这在我的 webhook 文件中,当付款支付时,会发送一封电子邮件:


      //Let's send an email.

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

      Mail::send (new OrderPlaced ($order));

电子邮件通过输出 {{$order->order_id}} 和 {{$order->user_email}} 在我的视图中显示了所有订单信息,如 order_id 和 user_email 但是当我尝试循环时我看不到产品他们与:


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

它什么也没有返回,没有错误,什么也没有。dd ($product) 什么都不返回。我在这里忽略了什么?


我的想法:

1. 我没有使用 id 作为主键,所以我可能需要在 belongsToMany 关系中指定第二个和第三个参数?

2. Mail 之前定义的$order 变量,也许我无法通过这里获取关系?


慕丝7291255
浏览 108回答 2
2回答

MYYA

为了获得产品关系数据,您必须先加载它: $order = Order::with('products')->where('order_id', '=',$payment->metadata->order_id)->firstOrFail();

繁花不似锦

所以我想通了,也许其他人有时会面临同样的问题:我的外键在迁移中设置不正确。所以修复外键然后做一个 php artisan migrate refresh 解决了它。
打开App,查看更多内容
随时随地看视频慕课网APP