Laravel集合返回重复

时间:2018-08-27 01:42:37

标签: laravel eloquent

嗨,我正在尝试返回一个大于或等于今天的日期的用户时间表,或者该时间表包含的关系(ScheduledYard)尚未完成:

$schedules = Auth::user()
        ->schedules()
        ->where('due_at', '>=' , Carbon::now())
        ->orWhereHas('scheduledYards', function ($query) {
            $query->where('completed', false);
        })->get();
    $schedules = $schedules->sortBy('due_at');
    return ScheduleResource::collection($schedules);

这可以很好地工作,但是由于某种原因,它正在为其连接的每个用户复制此副本。也就是说,如果3位用户拥有此计划,则已验证用户将返回3次。

用户模型:

public function schedules()
{
    return $this->belongsToMany('App\Models\Schedule');
}

计划模型:

public function users() {
    return $this->belongsToMany('App\Models\User');
}

如果我删除orWhereHas(),它将返回一个对象。我在做什么错了,如何根据上述要求返回单个对象?

3 个答案:

答案 0 :(得分:1)

在计划模型中,您需要更改关系类型。我假设用户与时间表之间存在一对多的关系。在这种情况下,将users()更改为user()和方法主体,如下所示。

public function user() {
   return $this->belongsTo('App\Models\User');
}

答案 1 :(得分:0)

在用户模型中,正确的关系应定义为:

public function schedules()
{
    return $this->belongsTo('App\Models\Schedule');
}

答案 2 :(得分:0)

请尝试与众不同。例如,

public function schedules()
{
    return $this->belongsToMany('App\Models\Schedule')->**distinct**();
}