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

时间:2019-12-23 17:58:24

标签: php laravel

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

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

  

Illuminate \ Database \ QueryException:SQLSTATE [HY000]:常规错误:1364字段'user_id'没有默认值(SQL:插入usersname,{{1} },emailpasswordadminupdated_at)值(Darlington Okorie,darlingtonokoriec @ gmail.com,$ 2y $ 10 $ Ob161LW8sbbv5uDv9VVbienlmW.DWXVDK3wdfC0I0NlnOrg1 2019xx -12-23 17:41:30,2019-12-23 17:41:30))

这里是我在created_at中写的代码

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

怎么了?

6 个答案:

答案 0 :(得分:3)

我也面临这种问题。 我的情况是,我忘记在public function getGoogleResults(Request $request) { // Extract and sanatize input: $domain = $request->input('domain'); $terms = $request->input('terms'); // Build up a search URL: $pages = 10; $url = 'http://www.google.es/search?'.http_build_query(array('q' => $terms)); // Request search results: $client = new Goutte\Client; $crawler = $client->request('GET', $url); } 中写字段。

fillable

在$ fillable中写入字段之后。我的问题已解决。

答案 1 :(得分:0)

这是您的users迁移问题,而不是profiles迁移问题。您的迁移内容如下:

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

正在创建名为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.
]);

或者,在您的nullable()迁移中设置users

Schema::create('users', function (Blueprint $table) {
  $table->string('user_id')->nullable();

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

编辑:我真的不确定谁投票成功,但请阅读错误消息:

  

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

遇到此错误时,查询尝试插入到 users 表中,而不是profiles表中。由于users.user_id没有默认值,也不允许null,因此会引发错误。上面的3种选择提供了解决方案。

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

答案 2 :(得分:0)

我不设置您的人际关系,但尝试进行一些如下所述的更改。从用户表中删除use_id。您不需要该列。或者仅将其重命名为USER_CODE,例如,如果它不是必填列$table->string('user_id')->nullable();,则使其可以为空 老实说,我看不出在usrs表中有user_id列的目的

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

答案 3 :(得分:0)

只需从 configuration.set("hbase.security.authentication", "simple"); configuration.set("hbase.security.authorization", "false"); 表中删除$table->string('user_id');。在users表上有user_id,足以实现profiles一对一的关系。

注意:最好在user -> profile表上使用$table->unsignedBigInteger('user_id');而不是当前的$table->integer('user_id');

答案 4 :(得分:0)

一般错误:1364字段“ user_id”没有默认值

此错误的意思是表中有未传递的列

表格中的值...在您的情况下,您没有为字段传递值

user_id。我想您要实现的是要提供主

输入一个名字,所以解决的办法应该是重命名列$ table-> bigIncrements('id');到

$ table-> bigIncrements('user_id');并删除$ table-> string('user_id');

答案 5 :(得分:0)

您可以将'user_id'设置为允许db中的null。