2016-03-22 20 views
0

DISTINCTを使用して関係を表示する必要があります。laravel Distinctを使用したEloquent relationship

これは私のSQLデータです:

テーブルは

id | 
49 | 

テーブルjournees

id | formateurs_id | pochettes_id 
1 | 3    | 49 
2 | 4    | 49 
3 | 3    | 49 

テーブルformateurs

をポシェット
id | 
3 | 
4 | 

モデルポシェット

public function Journees() 
{ 
    return $this->hasMany('App\Journee','pochettes_id'); 
} 

モデルJournee

public function Formateurs() 
{ 
    return $this->belongsTo('App\Formateur', 'formateurs_id'); 
} 

Formateurが多くJourneeを持つことができますので、私は明確なformateursでデータを表示するには、このコードを使用しています同じポシェット:

$pochette = Pochette::find(49); 
foreach ($pochette->Journees->distinct('formateurs_id') as $formateur) { 
      echo $formateur->formateurs_id; 
      echo "<br>"; 
     } 

しかし、このコードは仕事をdosn't、私はこのエラーメッセージ

**BadMethodCallException in Macroable.php line 81: 
Method distinct does not exist.** 

を持って、私はこの結果を示します:

3 
4 

ない:

3 
4 
3 

答えて

5

ときプロパティのような優雅な関係にアクセスすると、Eloquent Collection。ただし、distinct()Query Builderメソッドであり、コレクションを返す前にQuery Builderインスタンスにアクセスする必要があります。リレーションシップの最後に()を追加すると、クエリービルダーインスタンスにアクセスし、それらのクエリービルダーメソッドを連鎖させることができます。あなたの場合、実際にgroupBy()メソッドを探していて、distinct()ではありません。 get()でクエリを終了することを忘れないでください。

foreach ($pochette->Journees()->groupBy('formateurs_id')->get() as $formateur) { 
    echo $formateur->id ; 
    echo "<br>"; 
} 
+0

しかし、私は2つのIDを示したい:次にあなたが 'GROUPBY()'を探していると ''個別の()されていない3および4 –

+1

@Ayedmedamineを。私は答えを更新しました。 –

+0

クエリビルダーにアクセスするためのAdd()は、私が知らなかったことでした。ドキュメント内にそのファイルがあるとは思わない? – ibex

関連する問題