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 關注
- 143 瀏覽
添加回答
舉報