Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1364 поле 'user_id' не имеет значения по умолчанию (SQL: insert into ' users`

Illuminate\Database\QueryException : SQLSTATE[HY000]: General error: 1364 поле 'user_id' не имеет значения по умолчанию (SQL: insert into ' users`

23.12.2019 08:58:24 Просмотров 38 Источник

У меня есть вопрос, и ответы, которые я получаю, на самом деле не помогают мне.

Поэтому я пытался в основном создать таблицу профилей для каждого пользователя. Я следовал всем правилам для отношений один к одному но я продолжаю получать эту ошибку

Осветить\базы данных\QueryException : кодом sqlstate[HY000]: общая ошибка: 1364 поле 'ид_пользователя' не имеет значение по умолчанию (в SQL: вставка в users (name, email, 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

Что же может быть не так?

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/59459471/illuminate-database-queryexception-sqlstatehy000-general-error-1364-field#comment105109474_59459471
Просто заметил это. Проверим и подтвердим. Спасибо.

Ответы - 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`

Является ответом!
Tim Lewis

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, так как существует проблема с самой миграцией.

livreson ltc

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();
    }
Hafez Divandari

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 таблица.

Закрыть X