Привет, просто сохраните все отношения в пользовательской модели и получите к ним доступ через нее. В другой модели просто отношение обратно к пользовательской модели. Я немного изменяю вашу структуру, пусть пользователь добавляет флажок для нескольких адресов для адреса доставки по умолчанию, а также для нескольких контактов, если вы хотите, чтобы вы также могли сохранить только один контакт.
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('App\Models\UserInfo');
}
public function user_address(){
return $this->hasMany('App\Models\UserAddress');
}
public function user_contact(){
return $this->hasMany('App\Models\UserContact');
}
в вас все другие пользовательские модели просто добавьте это
public function user(){
return $this->belongsTo('App\Models\User');
}
, вы можете получить доступ к связи через пользовательскую модель
$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;
update
user_id - это внешний ключ в каждой таблице, отличной от таблицы пользователя, если вы хотите проверить отношения, создайте семя User db и 4 фабрики (user, user_address, user_contact, user_info ) чтобы заполнить фальшивые данные, после создания моделей и данных в базе данных извлеките первого пользователя и вызовите его отношения, сделайте то же самое для других моделей, извлеките первую запись и вызовите отношение пользователя из этой модели.
это мой класс UserTableSeeder метод запуска
public function run()
{
factory(App\User::class, 10)->create()->each(function ($user) {
$user->user_address()->save(factory(App\Models\UserAddress::class)->make());
$user->user_contact()->save(factory(App\Models\UserContact::class)->make());
$user->user_info()->save(factory(App\Models\UserInfo::class)->make());
});
}