2014-10-26 145 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