我有一个问题,得到的答案并没有真正帮助我。
所以我一直在尝试为每个用户创建一个Profiles表。我遵循一对一关系的规则,但我不断收到此错误
Illuminate \ Database \ QueryException:SQLSTATE [HY000]:常规错误:1364字段'user_id'没有默认值(SQL:插入
users
(name
,{{1} },password
,admin
,updated_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
怎么了?
答案 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种选择提供了解决方案。
该错误与User
或Profile
模型无关,因为迁移本身存在问题。
答案 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。