laravel使用Distinct的雄辩关系

时间:2016-03-22 15:40:18

标签: laravel-5 eloquent distinct relationship

我需要使用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

1 个答案:

答案 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>";
}