所以我有一个疯狂的想法,它与 Laravel 和模型继承有关。我想配置一组具有单亲的模型,但是当我请求子模型时,我希望返回数据。例如,我将有一个 Contacts 模型,它是父模型:
Contacts: id, first_name, last_name, image
然后我会有一系列从联系人继承的联系人类型。这些子模型中的每一个都有自己的一组字段(即对于成员我需要知道他们何时加入等,但对于志愿者我可能需要知道他们是否有最新的急救证书)。这里有一些例子:
Members: contact_id, joined_on, birthday, medical_concerns
Volunteers: contact_id, current_first_aid, interests
Staff: contact_id, pay_rate
我希望能够做类似的事情:
$members = \App\Member::all();
并返回联系人和成员数据,就好像所有内容都是一行一样,如下所示:
+---+------------+-----------+-------+------------+------------+------------------+
|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 |
+---+------------+-----------+-------+------------+------------+------------------+
为了让它更难一点,我希望所有适用于父母的关系都为孩子工作。所以我可以做这样的事情:
$members = \App\Member::find(1)->phone
而且,即使 Member 模型没有定义到 Phone 模型的关系,它也会返回与 Contact 相关的电话,因为父模型具有这种关系。
我还希望能够在检索数据时指定不属于子项的列,并且 Laravel 不会抛出错误:
$members = \App\Member::all(['first_name','last_name','joined_on'])
我已经搞砸了重写 Eloquent 模型并编写了我自己的 all 版本并找到了正在工作的方法,但看起来我可能必须重写所有方法才能让它工作,也许这不仅仅是工作放弃 Eloquent 并寻找其他(或我自己定制的)解决方案。
所以我想我的问题是:有没有一种“简单”的方法可以用 Laravel 做到这一点,或者我是否试图让它做它从未打算做的事情?