我有一个名为“用户”的模型,其中包含以下信息:
id
name
status_id
我有一个名为“状态”的模型,其中包含以下信息:
id
description
执行原始查询时,人们自然会加入users.status_id = status.id
上的两个表,但是我想使用Laravel的Eloquent ORM来获取用户的状态文本。
例如。 User::find(1)->status()->description
提供了许多不同的功能,例如has_one
,has_many
和belongs_to
,但这些功能都不起作用。有没有人对我如何做这样的事情有任何想法?
答案 0 :(得分:3)
您设置数据库的方式,您将向Status模型添加一个用户方法。
在您的状态模型中:
public function user()
{
return $this->has_one('User');
}
这可以让您按状态查询,但不能按用户查询。要实现所需的功能,即User::find(1)->status()->description
,您需要让数据库看起来像这样
Users
id
name
Status
id
description
user_id
现在,您将在用户模型中实施以下内容
public function status()
{
return $this->has_one('Status');
}
允许您使用:
User::find(1)->status()->description;
这将允许您在用户和状态之间建立一对一的关系。要实现一对多关系,即一个用户具有许多状态(可能不是最佳示例),您可以使用与上面相同的数据库设置,但在用户模型中,您将使用user()
函数返回:
$this->has_many('Status');
答案 1 :(得分:1)
我找到了答案。我可以通过运行Fluent查询而不是使用本机关系来完成上述操作:
public function status() {
return Status::where('id', '=', $this->status_id)->first();
}