2017-02-04 61 views
0

所以我有一個三列分表:client,projectsize將Laravel雄辯結果映射到多維數組?

每個客戶都與許多項目相關聯,並且每個項目都與許多大小相關聯。使用侃侃而談,我試圖找到最有效的方法來提取數據,並把它變成一個數組,看起來像這樣:

$array = [ 
     [ 
      'client1' => [ 
       'project' => 'Alpha', 
       'sizes' => ['300', '400', '500'] 
      ] 
     ], 
     [ 
      'client2' => [ 
       'project' => 'Delta', 
       'sizes' => ['200', '400', '600'] 
      ] 
     ], 
    ]; 

看來我可以只使用嵌套的foreach循環,從客戶端轉移到項目大小,但在Laravel一定有更好的方法。文檔有點稀疏,我找不到一個明顯的方法來做到這一點。什麼是最好的方法?或者我甚至正確地接近這個?

回答

0

我不確定這是否正確,因爲您沒有包含您的雄辯查詢或表結構。

定義模型關係, 後,我不喜歡這樣寫道:

$data = Client::with(project.size)->get(); 

它是什麼,口若懸河將使用客戶端表,並顯示所有的客戶端,並訪問項目和項目大小每個客戶。

但是,這隻有在你正確設計你的數據庫並定義了正確的模型關係的情況下才有效。

假設您有3個表,客戶端,項目和大小,並且每個表都有相應的外鍵。

例爲模型的關係:

客戶端模式:

public function project() 
{ 
    return $this->hasMany('App\Project'); 
} 

public function size() 
{ 
    return $this->hasManyThrough('App\Size','App\Project'); 
} 

項目模型:

public function client() 
{ 
    return $this->belongsTo('App\Client'); 
} 

public function size() 
{ 
    return $this->hasMany('App\Size'); 
} 

規格型號:

public function project() 
{ 
    return $this->belongsTo('App\Project'); 
} 
+0

我明白了。所以我需要把列放在單獨的表中?現在他們都在同一張名爲'工作'的表中。 –

+0

是的,它應該是這樣的。你應該「正常化」你的數據庫。 http://www.studytonight.com/dbms/database-normalization.php –