【问题标题】:Eloquent relationship not working in mail雄辩的关系在邮件中不起作用
【发布时间】:2020-09-16 07:08:50
【问题描述】:

我有一个 Order、Product 和 OrderProduct 模型。 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 具有相同的 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变量,这里可能打不通关系?

【问题讨论】:

    标签: php laravel eloquent laravel-7 eloquent-relationship


    【解决方案1】:

    为了获得产品关系数据,您必须先加载它:

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

    关于加载关系的更多细节:

    https://laravel.com/docs/7.x/eloquent-relationships#eager-loading

    【讨论】:

    • 很遗憾,这并没有改变任何东西。
    【解决方案2】:

    所以我想通了,也许其他人有时会面临同样的问题: 我的外键在迁移中没有正确设置。所以修复外键然后做一个 php artisan migrate refresh 解决了它。

    【讨论】:

      猜你喜欢
      • 2023-04-07
      • 2019-08-13
      • 1970-01-01
      • 2020-08-27
      • 2017-08-17
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      相关资源
      最近更新 更多