2013-02-10 184 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