Вопрос 1: Невозможно обновить запись для реляционной таблицы profiles
. В итоге получится следующая ошибка.
Ошибка
Подсветка \ База данных \ QueryException
SQLSTATE [42S22]: столбец не найден: 1054 Неизвестный столбец 'user_id' в 'списке полей' (SQL: обновление users
set user_id
= 132, users
. updated_at
= 2020-03-30 08:48:51 где id
= 132 )
У меня есть две таблицы users
и profiles
со схемой ниже
Схема пользователя
Schema::create(
'users',
function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('username')->unique();
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('password')->nullable();
$table->enum('role', ['super', 'admin', 'manager', 'subscriber', 'user'])->default('user');
$table->boolean('is_root')->default(FALSE);
$table->rememberToken();
$table->timestamps();
$table->unique(['username', 'email'], 'users_unique_credentials');
}
);
Схема профиля
Schema::create('profiles', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('user_id')->unsigned();
$table->string('key', 191);
$table->longText('value')->nullable();
$table->foreign('user_id', 'profile_uid_fk')
->references('id')
->on('users')
->onDelete('cascade');
$table->unique(['user_id', 'key'], 'profile_unique_key');
});
Пользовательский модал - отношение
public function profiles()
{
return $this->hasMany(Profile::class)->orderBy('id');
}
Профиль модальный - отношение
public function user()
{
return $this->belongsTo(User::class);
}
Пользовательский контроллер - обновление
public function update(UserRequest $request, User $user)
{
$user->email = $request->email;
$user->role = $request->role;
if ($request->has('password')) {
$user->password = Hash::make($request->password);
}
$user->save();
$user->profile()->save($user);
}
dd - $ request-> all ()
Вопрос 2: user_id
- это скрытое поле в форме. Однако я бы предпочел вместо этого передать его с контроллера. Есть ли способ сделать это?
array:15 [▼
"_token" => "O3Ardvzz7QvAsYa7aUWn4dbJx1qpCsScykD1fh1S"
"_method" => "PUT"
"email" => "newage@test.com"
"password" => null
"password_confirmation" => null
"role" => "subscriber"
"first_name" => "John"
"last_name" => "doe"
"city" => "Ahmedabad"
"mobile" => "545466555"
"facebook" => "https://facebook.com/profile/pp"
"twitter" => "https://twitter.com"
"youtube" => null
"instagram" => null
"user_id" => "132"
]