laravel多表關聯查詢問題

來源:互聯網
上載者:User

三張mysql資料表

  • 產品表(product)

  • 套餐表(package)

  • 套餐資訊表(package_data)。

產品表主要欄位:

  • id(自增id)

  • name(名稱)

  • ...

套餐表主要欄位:

  • id(自增id)

  • title(套餐名稱)

  • ....

套餐資訊表主要欄位:

  • id(自增id)

  • product_id(產品id)

  • package-id(套餐id)

  • product_num(產品數量)

  • ...

簡單說明:

一個套餐中有多個產品,套餐表和套餐資訊表本來可以弄在一個表中,但是為了減少冗餘資料,所以對套餐表進行了簡單的垂直分表。

問題來啦 :-)

  • 在上述情況下,我想知道套餐A中含有多少個產品A。那麼模型中的關聯關係該怎麼定義?

  • 在上述情況下,我想知道套餐A和套餐B總共使用了多少個產品A,產品B,etc...、那麼該如何操作?

ps:上述問題已經翻過官方文檔,但是我智商太低,導致理解的不清晰,所以特來請教各位。

期待各位大大熱情指導 ^_^

回複內容:

三張mysql資料表

  • 產品表(product)

  • 套餐表(package)

  • 套餐資訊表(package_data)。

產品表主要欄位:

  • id(自增id)

  • name(名稱)

  • ...

套餐表主要欄位:

  • id(自增id)

  • title(套餐名稱)

  • ....

套餐資訊表主要欄位:

  • id(自增id)

  • product_id(產品id)

  • package-id(套餐id)

  • product_num(產品數量)

  • ...

簡單說明:

一個套餐中有多個產品,套餐表和套餐資訊表本來可以弄在一個表中,但是為了減少冗餘資料,所以對套餐表進行了簡單的垂直分表。

問題來啦 :-)

  • 在上述情況下,我想知道套餐A中含有多少個產品A。那麼模型中的關聯關係該怎麼定義?

  • 在上述情況下,我想知道套餐A和套餐B總共使用了多少個產品A,產品B,etc...、那麼該如何操作?

ps:上述問題已經翻過官方文檔,但是我智商太低,導致理解的不清晰,所以特來請教各位。

期待各位大大熱情指導 ^_^

咳咳~,最終還是在文檔中找到答案。連結在此 。請自行搜尋"嵌套的渴求式載入"部分查看。

說下具體過程:

package模型中定義hasManyData()方法

public function hasManyData(){    return $this->hasMany(PackageData::class, 'package_id', 'id');}

package_data模型中定義BelongsToProduct()方法

public function BelongsToProduct(){    return $this->belongsTo(Product::class, 'product_id', 'id');}

控制器中使用:

$packageList = Package::with('hasManyData', 'package_data.BelongsToProduct')->get();

大功告成!

另一種方案

ps:某同事給出的方法是大概是這樣的,以下為虛擬碼:

$packageList = Package::with('hasManyData')->get();foreach( $packageList as $key => $val ){    ...    $productList = PackageData::with('BelongsToProduct')->where(...)->get();    ...}

我覺得效能渣的一逼~,不想再研究啦!腦袋有點熱,所以寫的有點亂,不對的地方還請斧正。謝謝圍觀過這個問題的大大們~

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.