雄辩的模型多对一关系
Posted
技术标签:
【中文标题】雄辩的模型多对一关系【英文标题】:Eloquent Model Many to One Relationship 【发布时间】:2014-07-05 12:10:54 【问题描述】:举个例子:
我有一个表users
,其字段为id
、name
、city
。我有另一个表,其中包含城市的名称。表名称为cities
,字段为:id
、name
。因此,我将一个城市的 id(主键)存储在表 users
的 city
列中。在获取用户 Eloquent 模型时,获取城市名称的最佳方法是什么?
【问题讨论】:
【参考方案1】:按照惯例,您可以将关系命名为city()
,但还有一个属性city
是外键,因此您无法访问相关模型。
如果是这样,那么我建议将外键重命名为city_id
或类似的名称,那么它会起作用:
$user->city; // City model
$user->city->name;
否则,如果无法更改架构,则重命名关系:
// User model
public funciton relatedCity()
return $this->belongsTo('City', 'city');
// then
$user->relatedCity->name;
【讨论】:
是的,我错过了使用belongsTo关系的列名的“_id”部分,这是一对一关系的逆。现在可以了。谢谢。【参考方案2】:假设您已经配置了模型
// find a user named John
$user = User::where('name', '=', 'John')->first();
// get the city of the user
$userCity = $user->city;
【讨论】:
$user->city
返回城市的id
。我需要城市的name
。
$userCity = City::where('id', '=', $user->city)->first();然后您可以通过 $userCity->name; 获取名称
是的,我可以做到。但我正在使用关系在 Eloquent ORM 中寻找解决方案。以上是关于雄辩的模型多对一关系的主要内容,如果未能解决你的问题,请参考以下文章