我有一个appointments
表和一个appointment_members
表,我的用户需要通过用appointments
搜索来获得"member_id"
的集合,这可能是Person
,Incident
或CustomerID
。 appointment_members
表具有member_id
和appointment_id
列,因此member_type
(也是一列)是不相关的。这一切都是由以前的开发人员建立的,而Eloquent模型上的关系则缺失了。我只是在创建一个简单的GET路由,该路由需要返回该member_id的任何/所有约会。每行都有一个约会,因此如果我要传递一个返回10个结果的member_id
,则可能有多个应用,而另一些则没有,但是最终,我只需要一个与member_id
。这是appointment_members
表的屏幕截图:
如果我创建一个与约会成员上的约会的简单hasOne
关系:
public function appointments()
{
return $this->HasOne(Appointment::class, 'id', 'appointment_id');
}
我可以分别使用appointment_members
来获得appointment
的集合,但是不确定如何将其归结为仅获取appointments
。我所拥有的一种解决方法是使用HasOne,然后提取/过滤约会:
$appointmentMembers = AppointmentMembers::where('member_id', $request->input('memberId'))->get();
$appointments = $appointmentMembers->pluck('appointments')->filter();
好奇是否有人会发现更好的方法。谢谢!
答案 0 :(得分:1)
我可能不太了解,但是如果成员类型不重要,我可能会采用最简单的方法。
该表已经设置为可以处理belongsToMany或morphMany,因此请在Member类上创建关系(或者,如果您没有父成员类,则将其粘贴在Person,Incident,等。当然,您也可以通过poly来做到这一点,但这是一个简单的示例,可以满足您的需求:
public function appointments()
{
return $this->belongsToMany(Appointment::class)->withPivot('member_type');
}
然后仅查询您需要约会的成员对象(使用poly即可完成这一步):
$allAppointmentsForID = $member->appointments();
$appointments = $allAppointmentsForID->wherePivot('member_type', $whateverClassThisIS);
以上内容考虑了member_type。如果这无关紧要,您可以只使用顶行。
您的原始数据库已设置为处理多态关系,因此,如果您想要的不仅仅是约会,您也可以通过这种方式进行设置。现在,您需要将TYPE添加到查询中以涵盖不同的类。
如果成员类型很重要,那么在Member类上,多态可能是这样的:
public function appointments()
{
return $this->morphMany(Appointment::class, 'memberableOrmember_typeOrWhatever');
}
然后,您只需一行即可查询成员对象
$appointments = $member->appointments();