2 回答
TA贡献1853条经验 获得超6个赞
首先,您不需要Order第二次查询,因为您已经在上面的行中找到了它,即
$order_details = Orders::find($payment_orderid);
$order_products = Orders::find($payment_orderid)->items;
可:
$order_details = Orders::find($payment_orderid);
$order_products = $order_details->items;
其次,如果您想获得books订单,您可以belongsToMany在Order模型上建立hasOne关系或在Items模型上建立关系(或两者)。
属于多人
将以下内容添加到您的Orders模型中:
public function books()
{
return $this->belongsToMany(Books::class, 'items')
->withPivot('quantity')
->withTimestamps();
}
然后在您的控制器中,您可以执行以下操作:
$order_details = Orders::find($payment_orderid);
$books = $order_details->books; //Each book with have a `pivot` property than contains the quantity.
有一个
在您的Items模型中,您可以添加以下内容:
public function book()
{
return $this->hasOne(Books::class);
}
然后在您的控制器中,您可以使用预先加载来获取物品和书籍:
$order_details = Orders::with('items.book')->find($payment_orderid);
$order_products = $order_details->items;
在上面每个order_product都有一个books属性,即
foreach ($order_products as $order_product) {
$order_product->book->name;
}
TA贡献1934条经验 获得超2个赞
根据我的理解,您的项目表是订单和书籍的数据透视表。所以你可以做这样的事情:
订单模型
public function books()
{
return $this->belongsToMany('App\Book', 'items',
'order_id', 'book_id');
}
items是数据透视表。
在控制器中:
public function user_order_details($payment_orderid)
{
$order_details = Orders::find($payment_orderid);
foreach ($order_details->books as $product)
{
echo $product->name;
}
}
- 2 回答
- 0 关注
- 121 浏览
添加回答
举报