首頁 >後端開發 >php教程 >laravel多表關聯查詢問題

laravel多表關聯查詢問題

WBOY
WBOY原創
2016-08-27 09:06:521675瀏覽

三張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()方法

<code class="php">public function hasManyData()
{
    return $this->hasMany(PackageData::class, 'package_id', 'id');
}</code>

package_data模型中定義BelongsToProduct()方法

<code class="php">public function BelongsToProduct()
{
    return $this->belongsTo(Product::class, 'product_id', 'id');
}</code>

控制器中使用:

<code class="php">$packageList = Package::with('hasManyData', 'package_data.BelongsToProduct')->get();</code>

大功告成!

另一種方案

ps:某同事給的方法是大概是這樣的,以下為偽代碼:

<code class="php">$packageList = Package::with('hasManyData')->get();

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

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn