Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1364 поле 'user_id' не имеет значения по умолчанию (SQL: insert into ' users`
У меня есть вопрос, и ответы, которые я получаю, на самом деле не помогают мне.
Поэтому я пытался в основном создать таблицу профилей для каждого пользователя. Я следовал всем правилам для отношений один к одному но я продолжаю получать эту ошибку
Осветить\базы данных\QueryException : кодом sqlstate[HY000]: общая ошибка: 1364 поле 'ид_пользователя' не имеет значение по умолчанию (в SQL: вставка в
users
(name
,password
,admin
,updated_at
,created_at
) значения (Дарлингтон Okorie, darlingtonokoriec@gmail.com, $от 2Y$10$Ob161LW8sbbv5uDv9VVbienlmW.DWXVDK3wdfC0I0NlnOrg1Jx/a2, 1, 2019-12-23 17:41:30, 2019-12-23 17:41:30))
Вот код, который я написал в своем UsersTableSeeder
public function run()
{
$user = App\User::create([
'name' => 'Darlington Okorie',
'email' => 'darlingtonokoriec@gmail.com',
'password' => bcrypt('password'),
'admin' => 1
]);
App/Profile::create([
'user_id' => $user->id,
'avatar' => 'uploads/avatar/img.png',
'about' => 'Great at writing. Better at blogging',
'facebook' => 'facebook.com',
'youtube' => 'youtube.com'
]);
}
И я также определил user_id
в моей create_users_table
public function up()
{
Schema::create('users', function (Blueprint $table) {
Schema::dropIfExists('users');
$table->bigIncrements('id');
$table->string('name');
$table->string('user_id');
$table->string('email')->unique();
$table->boolean('admin')->default(0);
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
И определил идентификатор user_id
create_profiles_table
Что же может быть не так?



Ответы - Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1364 поле 'user_id' не имеет значения по умолчанию (SQL: insert into ' users` / Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1364 Field 'user_id' doesn't have a default value (SQL: insert into `users`

23.12.2019 09:04:13
Это проблема с Schema::create('users', function (Blueprint $table) {
$table->string('user_id')->nullable();
с миграцией профилей. Ваша миграция имеет такую строку:
profiles
Который создает ненулевой Schema::create('users', function (Blueprint $table) {
...
$table->string('user_id'); // This one
. В вашем varchar
файле вы этого не устанавливаете, и user_id
не допускается. Добавьте и настройте следующую строку ниже:
Seed
Кроме того, установите user_id
для $user = App\User::create([
'name' => 'Darlington Okorie',
'email' => 'darlingtonokoriec@gmail.com',
'password' => bcrypt('password'),
'admin' => 1,
'user_id' => 'SomeRandomString' // Add this, set to whatever is logical.
]);
Честно говоря, если вам не нужен отдельный идентификатор для каждого nullable()
, вашей Schema::create('users', function (Blueprint $table) {
$table->string('user_id')->nullable();
, и вы можете полностью удалить его из миграции.
Edit: я действительно не уверен, кто был понижен, но прочитал сообщение об ошибке:
Поле user_id не имеет значения по умолчанию (SQL: insert into users ...)
При возникновении этой ошибки запрос пытается вставить в таблицу Schema::create('users', function (Blueprint $table) {
$table->string('user_id')->nullable();
, а не в User
. Начиная users
не имеет значения по умолчанию, а также не допускает user_id
, возникает ошибка. 3 варианта, приведенные выше, обеспечивают решение этой проблемы.
Ошибка не имеет никакого отношения к users
или profiles
, так как существует проблема с самой миграцией.

23.12.2019 09:44:06
Я не знаю, как устроены ваши отношения, но попробуйте внести некоторые изменения, как указано ниже. Удалите use_id из таблицы users. Вам не нужна эта колонка. Или просто переименуйте его в USER_CODE, например, сделайте его nullable, если это не обязательный столбец $table->string('user_id')->nullable();
Честно говоря я не вижу смысла иметь столбец user_id в таблице usrs
// Profiles Migration:
public function up()
{
Schema::create('profiles', function (Blueprint $table) {
...
$table->unsignedInteger('user_id');
....
$table->foreign('user_id')->references('id')->on('users')
->onUpdate('cascade')->onDelete('cascade');
});
}
// Profile.php Model
public function user()
{
return $this->belongsTo('App\User');
}
// User.php Model
public function user()
{
return $this->hasOne('App\Profile');
}
// Inside your Controller
$user = new App\User;
$user->name = 'Darlington Okorie';
$user->email = 'darlingtonokoriec@gmail.com';
$user->password = bcrypt('password');
$user->admin => 1;
if($user->save()) {
$userID = $user->id;
$profile = new App/Profile;
$profile->user_id = $userID;
$profile->avatar = 'uploads/avatar/img.png';
$profile->about = 'Great at writing. Better at blogging';
$profile->facebook = 'facebook.com';
$profile->youtube = 'youtube.com';
$profile->save();
}

23.12.2019 09:57:04
Просто удалить $table->string('user_id');
от users
таблице. У вас есть user_id
на profiles
таблица, который является достаточным для осуществления user -> profile
один-к-одному отношения.
Примечание: лучше использовать $table->unsignedBigInteger('user_id');
вместо текущих $table->integer('user_id');
на ваш profiles
таблица.