嗨,我正在尝试返回一个大于或等于今天的日期的用户时间表,或者该时间表包含的关系(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(),它将返回一个对象。我在做什么错了,如何根据上述要求返回单个对象?
答案 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**();
}