Illuminate\Database\QueryException:SQLSTATE[HY000]:一般错误:1364 字段“user_id”没有默认值(SQL:插入“users”

Dar*_*rie 5 php laravel

我有一个问题,但我得到的答案并没有真正帮助我。

所以我一直在尝试为每个用户创建一个配置文件表。我遵循了一对一关系的规则,但我不断收到此错误

Illuminate\Database\QueryException : SQLSTATE[HY000]: 一般错误:1364 字段“user_id”没有默认值(SQL:插入users( name, email, password, admin, updated_at, created_at) 值(Darlington Okorie,darlingtonokoriec@gmail.com,$2 y$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'
    ]);
}
Run Code Online (Sandbox Code Playgroud)

我也在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();
    });
}
Run Code Online (Sandbox Code Playgroud)

user_id并在我的中定义了create_profiles_table

 public function up()
{
    Schema::create('profiles', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('avatar');
        $table->integer('user_id');
        $table->text('about');
        $table->string('facebook');
        $table->string('youtube');

        $table->timestamps();
    });
}
Run Code Online (Sandbox Code Playgroud)

可能出什么问题了?

小智 5

我也遇到过这样的问题。我的案例,我忘记在 中写入该字段fillable

protected $fillable = [
        'name', 
    ];
Run Code Online (Sandbox Code Playgroud)

将字段写入 $fillable 后。我的问题解决了。


Tim*_*wis 0

这是您的迁移问题users,而不是profiles迁移问题。您的迁移有这一行:

Schema::create('users', function (Blueprint $table) {
  ...
  $table->string('user_id'); // This one
Run Code Online (Sandbox Code Playgroud)

这是创建一个名为 的非空varcharuser_id。在您的Seed文件中,您没有设置该设置,并且null是不允许的。添加并配置以下行:

 $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.
]);
Run Code Online (Sandbox Code Playgroud)

或者,设置nullable()迁移users

Schema::create('users', function (Blueprint $table) {
  $table->string('user_id')->nullable();
Run Code Online (Sandbox Code Playgroud)

老实说,除非您需要为每个 单独的标识符User,否则您的users表可能不需要user_id,并且您可以将其从迁移中完全删除。

编辑:我真的不确定是谁投了反对票,但请阅读错误消息:

字段“user_id”没有默认值(SQL:插入用户...)

当遇到此错误时,查询正在尝试插入到users表中,而不是profiles表中。由于users.user_id没有默认值,也不允许null,所以会抛出错误。上述 3 个替代方案提供了解决方案。

User该错误与或模型无关Profile,因为迁移本身存在问题。