我刚刚在一个雄辩的模型中建立了我的第一个关系。
class Member extends Model
{
public function person()
{
return $this->hasOne(Person::class, 'id', 'person_id');
}
一开始有点混乱,因为文档会在person表中使用member_id。但是对于我的db结构来说,这是没有意义的。无论如何,我很难在索引或表单中显示记录,因为我试图像这样访问人员信息:
$member->mobile
而不是
$member->person->mobile
我很想摆脱这个介于两者之间的“人”,就像我在处理左连接时一样。有没有什么方法可以做到这一点?而不使用左连接。每次我尝试在谷歌上搜索它,我都会得到通常口若悬河的关系信息。也许有一种选择已经存在了。如果是这样的话,我可能会编写不必要的函数,否则我甚至可能会切换回使用左连接和作用域。如果我继续使用这个,它会变得更糟..例如
$member->person->address->street
甚至是连续5次,我都想避免
发布于 2017-06-27 18:07:51
我可能错了,但我不认为这是可能的,除了创建一个新的类来聚合您想要的任何模型的所有属性+关系的属性。您还可以更新模型类并覆盖__get()方法并做出相应的反应,但这听起来也需要做很多工作(请确保也调用父实现)。
指定关系名称的需要实际上使您的代码更容易阅读,因为$member->mobile
看起来更像是成员类的属性。此外,它还允许您在检索关系之前添加额外的约束
https://laravel.com/docs/5.4/eloquent-relationships#querying-relations
https://stackoverflow.com/questions/44786843
复制相似问题