2017-02-04 9 views
0

私はclientproject、およびsizeの3つの列を持つdbテーブルを持っています。Laravel Eloquentの結果を多次元配列にマッピングしますか?

各クライアントは多くのプロジェクトに関連付けられており、各プロジェクトはさまざまなサイズに関連付けられています。雄弁を使用して、私はデータを取得し、このようになります配列にそれを置くための最も効率的な方法を見つけようとしている:

$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 –