laravel - красноречивые отношения между пользователями, информацией о пользователях, адресами пользователей и контактами пользователей - PullRequest
0 голосов
/ 24 февраля 2020

Я создаю кучу моделей в своем laravel проекте. Есть четыре модели, то есть четыре таблицы в моей базе данных. А именно: User, UserInfo, UserAddress, UserContact. Пользовательская таблица является главной таблицей, а структура столбцов выглядит следующим образом:

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('App\Models\UserInfo');
    }


    public function user_address(){
        return $this->hasOne('App\Models\UserAddress');

    }



    public function user_contact(){

        return $this->hasOne('App\Models\UserContact');
    }

Модель UserInfo:

    public function user(){

        return $this->belongsTo('App\Models\User');

    }


    public function user_address(){

        return $this->hasMany('App\Models\UserAddress');
    }


    public function user_contact(){

        return $this->hasMany('App\Models\UserContact');
    }

Модель UserAddress:

    public function user(){

        return $this->belongsTo('App\Models\User');
    }



    public function user_info(){

        return $this->belongsTo('App\Models\UserInfo');
    }



    public function user_contact(){

        return $this->hasMany('App\Models\UserContact');
    }

Модель UserContact:

    public function user(){

        return $this->belongsTo('App\Models\User');
    }


    public function user_info(){

        return $this->belongsTo('App\Models\UserInfo');
    }


    public function user_address(){


        return $this->belongsTo('App\Models\UserAddress');

    }

Таким образом, вопрос в том, что я, например, не уверен, является ли пользователь контактом с дочерним элементом адреса пользователя или наоборот?

Является ли пользователь контактом с дочерним элементом пользователя Информация?

Кто-нибудь может пролить свет на это?

Цените это.

1 Ответ

1 голос
/ 24 февраля 2020

Привет, просто сохраните все отношения в пользовательской модели и получите к ним доступ через нее. В другой модели просто отношение обратно к пользовательской модели. Я немного изменяю вашу структуру, пусть пользователь добавляет флажок для нескольких адресов для адреса доставки по умолчанию, а также для нескольких контактов, если вы хотите, чтобы вы также могли сохранить только один контакт.

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());
        });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...