1

我有一个名为“用户”的模型,包含以下信息:

id
name
status_id

我有一个名为“状态”的模型,包含以下信息:

id
description

在执行原始查询时,自然会加入两个表,users.status_id = status.id但是我想使用 Laravel 的 Eloquent ORM 来获取用户的状态文本。

例如。User::find(1)->status()->description

提供了许多不同的功能,例如has_onehas_manybelongs_to,但这些都不起作用。有人对我如何做这样的事情有任何想法吗?

4

2 回答 2

3

按照您设置数据库的方式,您可以向 Status 模型添加一个只有一个用户的方法。

在您的 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');
于 2013-02-10T21:23:56.630 回答
1

我找到了答案。我可以通过运行 Fluent 查询而不是使用本机关系来完成上述操作:

 public function status() {

    return Status::where('id', '=', $this->status_id)->first();
 }
于 2013-02-10T21:10:12.753 回答