2014-10-26 143 views
0

林有一點麻煩找建立我的模型關係,以獲取一些我下面的數據最好的和正確的方法...雄辯關係

我的計劃是,以顯示內容取決於content_type和之間的鏈接是來自Users表的id和來自UserData表的user_id。這些都是這兩種模式過於用戶的UserData

用戶表

*id* *username* *password* 
1  johndoe  123 
2  janedoe  321 

的UserData表

*user_id *content*   *content_type* 
1   John Doe   full_name 
1   john-doe.jpg  avatar 
1   laravel   twitter 
1   blue    favorite_color 
2   Jane Doe   full_name 
2   jane-doe.jpg  avatar 
2   Eloquent   twitter 
2   green    favorite_color 

我希望有人可以看到我的目的,知道一個辦法。

回答

0

套裝在您的用戶模型中建立兩個關係:

public function data() { 
    return $this->hasMany('UserData'); 
} 

public function dataOfType($type) { 
    return $this->hasOne('UserData')->where('content_type', $type); 
} 

然後,您可以將所有關聯的數據與特定用戶(用戶1,在這種情況下)與

$userData = User::find(1)->data; 

或者,你可以指定一個特定的content_type檢索:

$userData = User::find(1)->dataOfType('avatar')->content; 

要獲取所有用戶,與它們相關的數據一起:

$users = User::with('data')->get(); 

您不能使用預先加載的dataOfType關係,因爲with聲明不接受參數(這是爲了與你指定需要content_type)。如果您需要爲多個用戶執行此操作並希望使用急切加載(例如,您希望讓所有用戶使用他們的頭像),則可以使用加載約束而不是您的dataOfType關係。

$users = User::with(array('data' => function($query) 
{ 
    $query->where('content_type', 'avatar'); 
}))->get(); 

例如,對於一個特定的用戶,讓他們full_name值,你可以運行:

$userFullName = User::find(1)->dataOfType('full_name')->content; 

或者,讓所有的用戶與他們的full_name值:

$users = User::with(array('data' => function($query) 
    { $query->where('content_type', 'full_name'); } 
))->get(); 

...並且可以訪問每個用戶的值(在foreach ($users as $user)循環內)在$user->content

0

從我看到的情況來看,您正嘗試爲用戶提供動態數據嗎?

如果是這樣,您將有兩個選擇:

1)使用多態關係,在那裏你將有一個類爲每個CONTENT_TYPE,並取時,將其轉換爲類,然後裏面該類,您可以覆蓋__toString方法以根據需要顯示。 你可以找到更多關於多態關係在這裏:http://laravel.com/docs/4.2/eloquent#polymorphic-relations

2),你可以添加另一列該會說如何呈現它,打印時,或添加方法模型他們返回作爲對待不同CONTENT_TYPE手動每次你要。現在

,有關的UserData和用戶之間的關係,你將有一個一對多的關係,所以,你更是預示了在用戶模式:

public function data(){ 
    return $this->hasMany("UserData"); 
} 

而在的UserData模式:

public function user(){ 
    return $this->belongsTo("User"); 
} 
+0

我現在就建立了關係。我如何獲得* content * where * content_type *是full_name? – 2014-10-26 21:54:58

+0

我不能得到多態關係的工作..你介意顯示一個例子嗎? – 2014-10-27 18:28:27