Laravel / Eloquent关系问题

时间:2013-02-10 20:52:08

标签: laravel eloquent

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

id
name
status_id

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

id
description

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

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

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

2 个答案:

答案 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();
 }