laravel-用户、用户信息、用户地址和用户联系人之间的微妙关系



我正在我的laravel项目中创建一堆模型。我的数据库中有四个模型,即四个表。即模型为UserUserInfoUserAddressUserContact。用户表是主表,列的结构如下:

users -> id , email, password,....other unimportant stuff.
user_info -> id, name, identity num, ......
user_address -> id, user_id, address1, address2,address3, shipping address,....
user_contact-> id, user_id, mobile_num,emergency_num,......

正如您所看到的,id列是了解任何用户的全部信息的关键标识符。我试图定义他们四个人之间的一种雄辩的关系,但不知道我是否正确。这就是我目前所拥有的:

用户型号:

public function user_info(){

return $this->hasOne('AppModelsUserInfo');
}

public function user_address(){
return $this->hasOne('AppModelsUserAddress');
}

public function user_contact(){
return $this->hasOne('AppModelsUserContact');
}

用户信息模型:

public function user(){
return $this->belongsTo('AppModelsUser');
}

public function user_address(){
return $this->hasMany('AppModelsUserAddress');
}

public function user_contact(){
return $this->hasMany('AppModelsUserContact');
}

用户地址模型:

public function user(){
return $this->belongsTo('AppModelsUser');
}

public function user_info(){
return $this->belongsTo('AppModelsUserInfo');
}

public function user_contact(){
return $this->hasMany('AppModelsUserContact');
}

用户联系方式:

public function user(){
return $this->belongsTo('AppModelsUser');
}

public function user_info(){
return $this->belongsTo('AppModelsUserInfo');
}

public function user_address(){

return $this->belongsTo('AppModelsUserAddress');
}

所以问题是,我不确定,例如,用户联系人是用户地址的孩子还是反过来?

用户联系人是用户信息的子项吗?

有人能解释一下吗?

非常感谢。

Hi只需保留用户模型中的所有关系并通过它访问它们。在其他模型中,只需将关系返回到用户模型。我对你的结构进行了一点修改,让用户为默认发货地址添加多个地址复选框,如果你想保留多个联系人,你也可以只保留一个联系人。

users -> id , email, password,....other unimportant stuff.
user_info -> id,user_id ,name, identity num, ......
user_address -> id, user_id, address,shipping address,....
user_contact-> id, user_id, mobile_num,emergency_num,......

用户模型

public function user_info(){
return $this->hasOne('AppModelsUserInfo');
}

public function user_address(){
return $this->hasMany('AppModelsUserAddress');
}
public function user_contact(){
return $this->hasMany('AppModelsUserContact');
}

在所有其他与用户相关的型号中,只需添加此

public function user(){
return $this->belongsTo('AppModelsUser');
}

您可以通过用户模型访问关系

$user_info = UserInfo::with('user')->first();
$user_info->user->user_contact();

如果只是用户型号

$user = User::with(['user_info','user_contact','user_address'])->first();
echo $user->user_info->name;

更新

user_id是除user表之外的每个表中的外键,如果您想测试关系,请创建user db seed和4个工厂(user、user_address、user_contact、user_info(来填充假数据,在创建模型和数据库中的数据后,先获取user并调用其关系,对其他模型也一样,先获取记录,然后从该模型中调用用户关系。

这是我的UserTableSeeder类运行方法

public function run()
{
factory(AppUser::class, 10)->create()->each(function ($user) {
$user->user_address()->save(factory(AppModelsUserAddress::class)->make());
$user->user_contact()->save(factory(AppModelsUserContact::class)->make());
$user->user_info()->save(factory(AppModelsUserInfo::class)->make());
});
}

最新更新