Laravel Создание таблицы базы данных userInfo при регистрации пользователей

Я делаю расширение на модели пользователя на личинке 5. То, что я хочу выполнить, – это когда пользователь регистрируется и проверяется. Я хочу, чтобы таблица данных ANOTHER создавалась с именем userInfo, которая имеет отношение к модели пользователя, а модель User имеет hasOne отношения с userInfo.

Две вещи. Как успешно реализовать эту логику. Я читал http://laravel.com/docs/master/eloquent-relationships#inserting-related-models и http://laravel.com/docs/5.1/events#registering-events-and-listeners

Но я не уверен

И второе. Где лучше всего реализовать эту логику.

заранее спасибо

PS. Я не собираюсь комбинировать две базы данных, потому что пользовательская модель – это когда они регистрируются, а данные, которые живут в userInfo, являются «необязательными» для пользователя, чтобы заполнить после аутентификации.

Если я правильно понимаю вопрос, вы хотите создать дополнительную связанную модель с пользователем при регистрации. Это должно быть довольно просто – что-то вроде:

$user->userInfo()->save(UserInfo::create([ //whatever information you need to save to the userInfo table - if any ])); 

Что касается того, где это можно сказать, у вас есть варианты. Вы можете добавить метод «store» на свой регистрационный контроллер. Или извлеките его в класс обслуживания «RegisterUser» и создайте там user и userInfo.

что-то вроде:

 //controller method public function store(Request $request, RegisterUser $registerUser) { $user = $registerUser->handle($request); return view(....) } //RegisterUser class public function __construct(UserInfo $userInfo) { $this->userInfo = $userInfo; } public function handle($request) { // create your user $user = ..... $user->userInfo()->save($this->userInfo->create([ ..... ])); // whatever else you need to do - send email, etc return $user; } 

Изменить: если вы используете Laravel 5 и строительные леса по умолчанию, вы можете добавить код в класс app \ Services \ Registar. Этот класс вызывается методом postRegister в признаке. Измените метод создания:

 // app\Services\Registar public function create(array $data) { $user = User::create([ 'name' => $data['name'], 'email' => $data['email'], 'password' => bcrypt($data['password']), ]); $user->userInfo()->save($this->userInfo->create([ ..... ])); // whatever else you need to do - send email, etc return $user; } 

Если вы используете Laravel 5.1, тогда класс Registar больше не существует, метод create был перемещен в AuthController (метод тот же, только в другом месте), поэтому переопределите его там.

Ваш ответ указал мне в правильном направлении, но я сделал несколько простых твиков на ваш отредактированный вопрос.

 $user->userInfo()->firstOrCreate([ 'aboutMe' => 'Please Fill out so users can know about you', 'bodyType' => '--', ]); return $user;