Eloquent 关系在邮件中不起作用
Eloquent relationship not working in mail
我有一个订单、产品和订单产品模型。 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-> 在我看来显示了所有订单信息,如 order_id 和 user_email user_email}} 但是当我尝试使用以下方法循环时我没有看到这些产品:
@foreach ($order->products as $product) {{$product->name}} @endforeach
只是 returns 没有,没有错误,没有。 add ($product) returns 没什么。我在这里忽略了什么?
我的想法:
1. 我没有使用 id 作为主键,所以我可能需要在 belongsToMany 关系中指定第二个和第三个参数?
2. Mail之前定义的$order变量,可能我这里看不到关系?
为了获得产品关系数据,您必须先加载它:
$order = Order::with('products')->where('order_id', '=',$payment->metadata->order_id)->firstOrFail();
有关加载关系的更多详细信息:
https://laravel.com/docs/7.x/eloquent-relationships#eager-loading
所以我想通了,也许其他人有时会遇到同样的问题:
我的外键在迁移中没有设置正确。所以修复外键然后做一个 php artisan migrate refresh 解决了它。
我有一个订单、产品和订单产品模型。 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-> 在我看来显示了所有订单信息,如 order_id 和 user_email user_email}} 但是当我尝试使用以下方法循环时我没有看到这些产品:
@foreach ($order->products as $product) {{$product->name}} @endforeach
只是 returns 没有,没有错误,没有。 add ($product) returns 没什么。我在这里忽略了什么?
我的想法:
1. 我没有使用 id 作为主键,所以我可能需要在 belongsToMany 关系中指定第二个和第三个参数?
2. Mail之前定义的$order变量,可能我这里看不到关系?
为了获得产品关系数据,您必须先加载它:
$order = Order::with('products')->where('order_id', '=',$payment->metadata->order_id)->firstOrFail();
有关加载关系的更多详细信息:
https://laravel.com/docs/7.x/eloquent-relationships#eager-loading
所以我想通了,也许其他人有时会遇到同样的问题: 我的外键在迁移中没有设置正确。所以修复外键然后做一个 php artisan migrate refresh 解决了它。