Я разрабатываю проект электронной коммерции в Ларавель 5.6, в котором у меня есть две таблицы для пользователей:
При регистрации пользователя с сохранением учетных данных в таблице Пользователи я хочу создать столбец в таблице Детали пользователя с тем же идентификатором пользователя, который был сгенерирован при добавлении в таблицу Пользователи.
Ниже приведены мои миграции:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->timestamp('email_verified_at')->nullable();
$table->rememberToken();
$table->timestamps();
});
Schema::create('user_details', function (Blueprint $table) {
$table->increments('id');
$table->string('phone')->nullable();
$table->string('city')->nullable();
$table->string('pincode')->nullable();
$table->unsignedInteger('user_id');
$table->foreign('user_id')->references('id')->on('users');
$table->timestamps();
});
Я пытался добавить следующее в функцию Создайте в Регистрконтроллер
protected function create(array $data)
{
User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
UserDetails::create([
'user_id' => Auth::user()->id
]);
return;
}
Но это не работает и показывает
Trying to get property 'id' of non-object"
.
Помогите мне пройти через это.
@EssKay Я думаю, что это часть базы данных. Возможно ли это с Laravel?
да. определенно
Кроме того, auth:: ничего не имеет на данный момент, поскольку вы только создаете его, а не аутентифицируете пользователя. вот где вы получаете ошибку
Триггеры в laravel stackoverflow.com/a/27418738/2267583
Вы можете изменить функцию create
на app/Http/Controllers/Auth/RegisterController.php
,
то есть по умолчанию:
protected function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
}
Просто измените это на
protected function create(array $data)
{
$user = User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => Hash::make($data['password']),
]);
UserDetails::create([
'user_id' => $user->id
]);
return $user;
}
Спасибо, @MateusJunges, ваш код правильный, который я уже пробовал раньше, но на этот раз я получил ошибку, которую решил в своем ответе.
Да, вы должны добавить добавление user_id в заполняемое свойство, но, глядя на код вашего вопроса, в частности, где вы пытаетесь создать новую запись UserDetails whti UserDetails::create(), я думал, что вы уже сделали это, как только это необходимо разрешить массовое присвоение.
Ответ @MateusJunges правильный, но ошибка, которую вы получили после этого, заключается в том, что
"Add [user_id] to fillable property to allow mass assignment on [App\UserDetails]."
Чтобы устранить эту ошибку, я должен добавить этот код в свою модель Детали пользователя:
protected $fillable = [
'user_id'
];
Вы можете сослаться на здесь.
После этого весь код @MateusJunges правильный.
У меня уже есть заполняемый массив с именем типа protected $fillable = [ 'name', 'email', ];
, но он показывает ошибку Add [name] to fillable property to allow mass assignment on [Illuminate\Foundation\Auth\User]
. Любая идея, почему это происходит?
@VishnuJayan Я думаю, вам тоже нужно добавить $fillable
к App\User
. Если это не ошибка, подумайте о том, чтобы задать новый вопрос с подробной информацией об ошибке.
Почему бы тебе не написать триггер? Когда пользователь добавляется, триггер добавляет его в другую таблицу