我有一个问题,但我得到的答案并没有真正帮助我。
所以我一直在尝试为每个用户创建一个配置文件表。我遵循了一对一关系的规则,但我不断收到此错误
Illuminate\Database\QueryException : SQLSTATE[HY000]: 一般错误:1364 字段“user_id”没有默认值(SQL:插入
users(name,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 后。我的问题解决了。
这是您的迁移问题users,而不是profiles迁移问题。您的迁移有这一行:
Schema::create('users', function (Blueprint $table) {
...
$table->string('user_id'); // This one
Run Code Online (Sandbox Code Playgroud)
这是创建一个名为 的非空varchar列user_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,因为迁移本身存在问题。