2013-02-10 192 views
0

我有一个名为“用户”的模式,并提供以下信息:Laravel /雄辩的关系问题

id 
name 
status_id 

我有一个名为“状态”的模式,并提供以下信息:

id 
description 

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

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

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

+0

*“这些工作都不是”*不是可接受的问题描述。 – dualed 2013-02-11 08:09:32

回答

1

我找到了答案。我可以通过运行流利的查询,而不是使用原生的关系做了以上:

public function status() { 

    return Status::where('id', '=', $this->status_id)->first(); 
} 
3

你有你的数据库设置的方式,您将添加一个具有一个用户的方法状态模式。

在状态模式:

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'); 
+0

谢谢 - upvote的深入答案。不幸的是,像你所建议的那样改变数据库结构并不是我的目的。事实证明,我所寻找的答案与我提出的问题并不完全一致,并且我找到了我在下面列出的答案。 – Darrrrrren 2013-02-10 21:31:54

+0

不用担心Darren,我只是写了Laravel如何期望你的数据库看起来像关系的工作。 :) – 2013-02-10 22:12:46