我正在创建一个小型网上商店,用户可以在其中创建订单,卖家可以看到订单。我已经定义了关系,但是相关功能为空。这就是我的表在phpmyAdmin https://imgur.com/a/C2PSmFt
中的样子这就是我在模型中定义关系的方式。
User.php
public function sellerOrders()
{
return $this->hasMany(Order::class);
}
Order.php
public function user()
{
return $this->belongsTo('App\User', 'seller_id');
}
public function products()
{
return $this->belongsToMany('App\Product')->withPivot('quantity','total','Subtotal');
}
public function productInfo()
{
return $this->belongsTo('App\Product');
}
public function orderInfo()
{
return $this->belongsTo(OrderProduct::class, 'seller_id');
}
这是我在控制器中的功能
$orders = Auth::user()->sellerOrders()->with('productInfo','orderInfo')->get();
dd($orders)
就是我所得到的
Collection {#305 ▼
#items: array:1 [▼
0 => Order {#286 ▼
#table: "orders"
#fillable: array:5 [▶]
#connection: "mysql"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#attributes: array:8 [▼
"id" => 9
"user_id" => 1
"shipping_email" => "878888"
"shipping_name" => "hattta"
"shipping_city" => "kljjdjd"
"shipped" => 0
"created_at" => "2019-07-05 01:33:58"
"updated_at" => "2019-07-05 01:33:58"
]
#original: array:8 [▶]
#changes: []
#casts: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: array:2 [▼
"productInfo" => null
"orderInfo" => null
]
#touches: []
+timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
]
}
如何显示productInfo
和orderInfo
?非常感谢您的帮助。
答案 0 :(得分:0)
因为您有一个按顺序返回hasMany
=>的顺序,您将拥有一个数组,并且由于已经查询过它,因此必须像这样查询每个项目:
foreach($orders as $order){
echo $order->productInfo->propertyOfProductInforTable;
echo $order->products->name; //or whatever is in your product table relation
}
答案 1 :(得分:0)
如果您查看转储中的 Order 模型上的属性,则没有字段seller_id
:
#attributes: array:8 [▼
"id" => 9
"user_id" => 1 <--- There is a user_id, but not seller_id
"shipping_email" => "878888"
"shipping_name" => "hattta"
"shipping_city" => "kljjdjd"
"shipped" => 0
"created_at" => "2019-07-05 01:33:58"
"updated_at" => "2019-07-05 01:33:58"
]
您需要向模型添加seller_id
字段并将值添加到数据库,或者可能更容易地更改 Order 模型上的关系,以便外键是user_id
而不是seller_id
。
解决此问题后,您应该在订单上看到**user**
的值。因此,如果您遍历$orders
,则可以执行$ order-> user,它应该返回该订单的用户。
与您的productInfo相同。在 Order 模型上没有product_id
,并且由于使用非常规名称(即,不仅是'product()
'),您需要指定外键在订单模型上的关联方法中。另外,不要忘记将product_id
添加为 Order 模型。
您的orderInfo()
方法也存在相同的问题-订单模型上没有seller_id
来提供这种关系-可以采用与上述相同的解决方法。