亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

作為中間表創建的項目表的雄辯關系

作為中間表創建的項目表的雄辯關系

PHP
收到一只叮咚 2021-11-05 10:55:43
我有 3 張桌子 - 書籍、訂單、物品我將訂單數據(order_id,user_id)保存在訂單表中,書籍 ID 保存在項目表中,因為用戶可以添加多本書。圖書++++++++++++++++++++++++++++++ id    book_code    name   ++++++++++++++++++++++++++++++   1     abc         Book 1   2     def         Book 2命令++++++++++++++++++++++++++++++ id  user_id               ++++++++++++++++++++++++++++++   1    1項目+++++++++++++++++++++++++++++++++++ id order_id book_id  quantity  +++++++++++++++++++++++++++++++++++  1    1        1         2  1    1        2         3我試圖顯示在訂單 ID 下預訂的訂單詳細信息和書籍,但我對使用這些關系感到困惑。由于所有數據都存儲在 Order 表中,因此我能夠成功顯示訂單詳細信息。但我無法顯示訂購到相應訂單 ID 的書籍模型書public function items(){    return $this->hasMany(Items::class);}模型訂單public function items(){    return $this->hasMany(Items::class,'order_id');}控制器public function user_order_details($payment_orderid){    // dd($payment_orderid);  //payment_orderid  = 1    $order_details = Orders::find($payment_orderid);    $order_products = Orders::find($payment_orderid)->items;    $books = Books::with('items')->get();    dd($books);}路線Route::get('orders', 'UserDashboardController@user_order');  // I will be fetching the user orders based on the ID from Orders tableRoute::get('orders/{payment_orderid}', 'UserDashboardController@user_order_details'); // Here I would like to show the details related to the order 我能夠獲取結果,但我不確定如何將結果與 order_id 隔離。如果我的數據庫實現錯誤且不可擴展,我愿意接受建議。簡而言之,我正在嘗試顯示相應訂單的書籍詳細信息注意:如果投反對票,請確保您評論原因。對于過去的幾個問題,我無緣無故地被否決了
查看完整描述

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;

}


查看完整回答
反對 回復 2021-11-05
?
撒科打諢

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;

    }

}


查看完整回答
反對 回復 2021-11-05
  • 2 回答
  • 0 關注
  • 143 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號