我需要使用DISTINCT显示关系数据。
这是我的sql数据:
表格pochettes
id |
49 |
表格记录
id | formateurs_id | pochettes_id
1 | 3 | 49
2 | 4 | 49
3 | 3 | 49
表格形成者
id |
3 |
4 |
模型Pochette
public function Journees()
{
return $this->hasMany('App\Journee','pochettes_id');
}
模型Journee
public function Formateurs()
{
return $this->belongsTo('App\Formateur', 'formateurs_id');
}
我使用此代码来显示具有不同形态的数据,因为Formateur可以在同一个Pochette中拥有许多Journee:
$pochette = Pochette::find(49);
foreach ($pochette->Journees->distinct('formateurs_id') as $formateur) {
echo $formateur->formateurs_id;
echo "<br>";
}
但是这段代码没有用,我有这个错误信息
**BadMethodCallException in Macroable.php line 81:
Method distinct does not exist.**
我会显示这个结果:
3
4
不是:
3
4
3
答案 0 :(得分:7)
当您访问像房产一样的Eloquent关系时,您将获得Eloquent Collection。但是,distinct()
是Query Builder方法,您需要在返回Collection之前访问Query Builder实例。如果将()
添加到关系的末尾,则可以访问Query Builder实例并链接这些Query Builder方法。在您的情况下,您实际上是在寻找groupBy()
方法,而不是distinct()
。不要忘记使用get()
结束查询。
foreach ($pochette->Journees()->groupBy('formateurs_id')->get() as $formateur) {
echo $formateur->id ;
echo "<br>";
}