Ber*_*nie 6 inheritance laravel eloquent laravel-eloquent
所以我有一个与Laravel和模型继承有关的疯狂想法.我想配置一组具有单个父模型的模型,但是当我请求子模型时,我希望返回数据.例如,我将有一个父模型的联系人模型:
Contacts: id, first_name, last_name, imageRun Code Online (Sandbox Code Playgroud)
然后我会有一系列继承自Contacts的联系人类型.这些儿童模型中的每一个都有自己的一组领域(即我们加入时需要知道的成员等,但对于志愿者,我可能需要知道他们是否拥有最新的急救证书).这里有一些例子:
Members: contact_id, joined_on, birthday, medical_concerns
Volunteers: contact_id, current_first_aid, interests
Staff: contact_id, pay_rate
Run Code Online (Sandbox Code Playgroud)
我希望能够做到这样的事情:
$members = \App\Member::all();Run Code Online (Sandbox Code Playgroud)
并返回联系人AND成员数据,好像一切都是一行,如下所示:
+---+------------+-----------+-------+------------+------------+------------------+
|id | first_name | last_name | image | joined_on | birthday | medical_concerns |
+---+------------+-----------+-------+------------+------------+------------------+
| 1 | Fred | Bloggs | null | 2015-01-01 | 1993-10-22 | false |
| 2 | Jim | Phillips | null | 2016-04-30 | 1987-09-22 | true |
+---+------------+-----------+-------+------------+------------+------------------+
Run Code Online (Sandbox Code Playgroud)
为了使它更难一点,我希望所有适用于父母的关系都能为孩子工作.所以我可以这样做:
$members = \App\Member::find(1)->phoneRun Code Online (Sandbox Code Playgroud)
并且,即使成员模型没有为Phone模型定义关系,它也会返回与联系人相关的电话,因为父母有这种关系.
我还希望能够在检索数据时指定不属于子项的列,并且不会让Laravel抛出错误:
$members = \App\Member::all(['first_name','last_name','joined_on'])
Run Code Online (Sandbox Code Playgroud)
我已经乱搞了覆盖Eloquent模型并编写了我自己的all版本并找到了正在运行的方法,但看起来我可能必须覆盖所有方法才能使其工作,也许这将是更多的工作而不仅仅是放弃Eloquent并寻找其他(或我自己的定制)解决方案.
所以我想我的问题是:Laravel是否有一种"简单"的方法可以做到这一点,或者我试图让它做一些从未打算过的事情?
小智 0
我认为你可以这样做:
$members = \App\Members::with('contact')->all();
Run Code Online (Sandbox Code Playgroud)
当然,您的 Members 模型应该定义了与联系人模型的 ownTo 关系。