Laravel 雄辩的关系
我有点麻烦找到最好的和正确的方法来建立我的模型关系,以获取我的一些数据下面 我的计划是根据内容类型来显示内容,其中的链接是Users表中的id和UserData表中的UserID。这两个模型也是用户和用户数据 用户表 用户数据表Laravel 雄辩的关系,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,我有点麻烦找到最好的和正确的方法来建立我的模型关系,以获取我的一些数据下面 我的计划是根据内容类型来显示内容,其中的链接是Users表中的id和UserData表中的UserID。这两个模型也是用户和用户数据 用户表 用户数据表 我希望有人能了解我的目的,并知道解决方案。从我的了解来看,您正在尝试为用户提供动态数据,对吗 如果是,您将有两个选择: 1利用多态关系,每个内容类型都有一个类,在获取时,它会将其转换为类,然后在类内部,您可以重写uu toString方法以显示所需的内容。 您可以在此处
我希望有人能了解我的目的,并知道解决方案。从我的了解来看,您正在尝试为用户提供动态数据,对吗 如果是,您将有两个选择: 1利用多态关系,每个内容类型都有一个类,在获取时,它会将其转换为类,然后在类内部,您可以重写uu toString方法以显示所需的内容。 您可以在此处找到有关多态关系的更多信息: 2您可以添加另一列,说明如何显示它,并在每次打印时手动处理不同的内容类型,或向模型中添加方法以按需返回它们 现在,关于UserData和User之间的关系,您将有一个OneToMany关系,因此,在用户模型中:
public function data(){
return $this->hasMany("UserData");
}
public function data() {
return $this->hasMany('UserData');
}
public function dataOfType($type) {
return $this->hasOne('UserData')->where('content_type', $type);
}
在UserData模型中:
public function user(){
return $this->belongsTo("User");
}
在用户模型中设置两个关系:
public function data(){
return $this->hasMany("UserData");
}
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;
或者,您可以指定要检索的特定内容类型:
$userData = User::find(1)->dataOfType('avatar')->content;
要获取所有用户及其关联数据,请执行以下操作:
$users = User::with('data')->get();
不能使用dataOfType关系进行即时加载,因为with语句不接受指定内容类型所需的参数。如果您需要为多个用户执行此操作,并且希望使用即时加载,例如,您希望获得所有用户及其化身,您可以使用即时加载约束,而不是dataOfType关系
$users = User::with(array('data' => function($query)
{
$query->where('content_type', 'avatar');
}))->get();
例如,对于特定用户,要获取其全名值,您可以运行:
$userFullName = User::find(1)->dataOfType('full_name')->content;
或者,要获取所有用户的全名值:
…每个用户的值都可以在$user->content的foreach$users as$user循环中访问。我现在设置了关系。如何获取内容类型为全名的内容?我无法使多态关系正常工作。。你介意举个例子吗?
$users = User::with(array('data' => function($query)
{ $query->where('content_type', 'full_name'); }
))->get();