雄辩的模型多对一关系

Posted

技术标签:

【中文标题】雄辩的模型多对一关系【英文标题】:Eloquent Model Many to One Relationship 【发布时间】:2014-07-05 12:10:54 【问题描述】:

举个例子:

我有一个表users,其字段为idnamecity。我有另一个表,其中包含城市的名称。表名称为cities,字段为:idname。因此,我将一个城市的 id(主键)存储在表 userscity 列中。在获取用户 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 中寻找解决方案。

以上是关于雄辩的模型多对一关系的主要内容,如果未能解决你的问题,请参考以下文章

通用关系多对一或多对多?

Hibernate 多对一关联查询

django--ORM表的多对一关系

flask 定义数据关系(多对一)

hibernate中配置单向多对一关联,和双向一对多

MyBatis之多对一关系