2015-06-26 1 views
2

Как бы вставлять строки в несколько таблиц при регистрации пользователя.Laravel 5 - Как вставить строки в несколько таблиц при регистрации пользователя

У меня есть базовая пользовательская таблица Laravel. У меня также есть таблица business (id, business_name) и таблица usersbusinesses (id, user_id, business_id).

Прежде всего, мне нужно создать (db insert) пользователя и получить его сгенерированное значение id.

Затем мне нужно создать (db insert) бизнес и получить его сгенерированное значение id.

Наконец, мне нужно создать (дб вставку) строку в таблице usersbusinesses, используя значения выше (user_id и business_id)

Я знаю, что я буду иметь, чтобы изменить приложение/Услуги/Регистратору. php, я просто не знаю, как это решить. Текущий код вставляет только таблицы пользователей:

/** 
* Create a new user instance after a valid registration. 
* 
* @param array $data 
* @return User 
*/ 
public function create(array $data) 
{ 
    return User::create([ 
     'first_name' => $data['first_name'], 
     'last_name' => $data['last_name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 
} 

Благодаря христианские

ответ

5

Если вы хотите сделать больше, это так же просто, как добавление к этой функции создания вы только что вставили.

/** 
* Create a new user instance after a valid registration and do more. 
* 
* @param array $data 
* @return User 
*/ 
public function create(array $data) 
{ 
    $user = User::create([ 
     'first_name' => $data['first_name'], 
     'last_name' => $data['last_name'], 
     'email' => $data['email'], 
     'password' => bcrypt($data['password']), 
    ]); 

    $business = Business::create([ 
     'name' => 'best business ever' 
    ]); 

    $business->owners()->sync([$user->id]); 

    return $user; 

} 

Для второго до последней части с:

$business->owners()->sync([$user->id]); 

Вы должны читать о красноречивых отношениях here.

Поскольку вы собираете эти многочисленные команды, я бы предложил прочитать в Job/Commands для Laravel. Они упоминаются в документах Laravel в Queues section.

Обновление о том, как добавить способ владельцев().

Business.php модель:

/** 
* Owners of the business. 
* 
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany 
*/ 
public function owners() 
{ 
    return $this->belongsToMany('App\User', 'userbusinesses'); 
} 

Аналогично в модели Users.php:

/** 
* Business this person owns. 
* 
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany 
*/ 
public function businesses() 
{ 
    return $this->belongsToMany('App\User', 'userbusinesses'); 
} 

Однако моя рекомендация будет оставаться рядный со стандартами и переименовать сводную таблицу в business_user , и в этом случае вам не понадобится второй аргумент в ownToMany.

Также обратите внимание, что я изменил команду сохранения для синхронизации. Я не понимал, что это было много-ко-многим в первый раз.

+0

Спасибо Сухаиб Малик. Я скопировал ваш код, но я получаю следующую ошибку: BadMethodCallException в строке Builder.php 1999: вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: owner() Я читал о многих отношениях, и третий (таблица), который я создал физически (usersbusinesses). В документации объясняется концепция сводной таблицы, что я должен использовать? Нужно ли мне, чтобы мой третий стол был объявлен физически? Спасибо – user3489502

+0

@ user3489502 Вам необходимо иметь в своей модели какой-либо метод, который связывает бизнес с пользователями через отношения владельца. Я обновил ответ, чтобы отразить это. –

+0

Да, это отношение много-ко-многим. В этом случае предприятия представляют собой бизнес-места, а пользователи - это рабочие, которые могут работать в разных местах. Это отлично, большое спасибо, это сработало !!! Отсутствует ; после синхронизации.Поэтому, если я позвоню в свою сводную таблицу user_business или business_user, мне не понадобится «userbusinesses» в качестве второго аргумента после gotToMany. Laravel 5 камней! В очередной раз благодарим за помощь! – user3489502

Смежные вопросы