pro100chel
@pro100chel
Python && PHP Developer

Как хранить в базе профиль пользователя?

Есть сервис на котором можно зарегаться используя логин и пароль.

После этого юзер может зайти в личный кабинет и установить/поменять имя/фамилию в профиле + еще есть пару полей по типу почты, страны проживания и прочего.

Как хранить это в базе?
Думаю что тут нужно юзать 2 таблицы. Одна с id пользователя (primary key), логин и пароль. А в другой таблице хранить профиль пользователя (те самые поля).
Вторая таблица имеет поля id (номер профиля), userid(id пользователя, к которому привязан этот профиль), name, surname, age, email и прочие.
Хотелось бы понять как правильно создавать при регистрации пользователя 2 записи (одну в таблице пользователей, вторую в таблице профилей).
Пока что дошел до того что сначала создаем пользователя, далее делаем запрос в базу чтобы вытянуть его id, далее в таблице профилей создаем пустой профиль, указывая в поле userid id только что зареганного юзера.
  • Вопрос задан
  • 190 просмотров
Решения вопроса 2
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Абсолютно нет смысла городить связанные таблицы для десятка полей. Для оптимизации используем справочники для стран и типов почты
Ответ написан
JhaoDa
@JhaoDa
LaravelRUS Team
нужно юзать 2 таблицы. Одна с id пользователя (primary key), логин и пароль. А в другой таблице хранить профиль пользователя (те самые поля).
Вторая таблица имеет поля id (номер профиля), userid(id пользователя, к которому привязан этот профиль), name, surname, age, email и прочие.
Да.

Хотелось бы понять как правильно создавать при регистрации пользователя 2 записи (одну в таблице пользователей, вторую в таблице профилей).
Брать и создавать две записи, в чём проблема? Завернув их в транзакцию, конечно.

далее делаем запрос в базу чтобы вытянуть его id
Надо использовать UUID, тогда не придётся ничего вытягивать.

Вопрос слишком размыт. Кроме того, есть подозрение, что ты либо не изучил возможности Eloquent, либо не планируешь использовать ORM вообще.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
delphinpro
@delphinpro
frontend developer
Две таблицы users и profiles
Связь Один-к-Одному
Т.к. профиль всегда нужен, можно его сразу прописать в жадную загрузку

class User {
  protected $with = [
    'profile',
  ];
  public function profile(){
    return $this->hasOne(Profile::class);
  }
}


$user = User::create([
   'email'      => $input['email'],
   'password'   => Hash::make($password),
]);

$user->profile()->create([
  'company'   => $input['company'],
  'position'  => $input['position'],
]);


Обращение через отношение

$user->profile->company
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы