SQLSTATE [HY000]:一般错误:1364 字段 'uID' 没有默认值
Posted
技术标签:
【中文标题】SQLSTATE [HY000]:一般错误:1364 字段 \'uID\' 没有默认值【英文标题】:SQLSTATE[HY000]: General error: 1364 Field 'uID' doesn't have a default valueSQLSTATE [HY000]:一般错误:1364 字段 'uID' 没有默认值 【发布时间】:2019-05-09 18:00:04 【问题描述】:刚开始使用 Laravel。我已将我的用户和配置文件模型与配置文件控制器一起附加。我的目标是自动在 profile 表中分配外键 uID。任何帮助将不胜感激。
用户模型文件
namespace App;
use Illuminate\Database\Eloquent\Model;
class user extends Model
// specify which attributes can be filled out during registration
public $timestamps = false;
protected $fillable=['firstname','lastname','email','password',];
public function profile()
return $this->hasOne(profile::class,'pID','uID');
轮廓模型文件
namespace App;
use Illuminate\Database\Eloquent\Model;
class profile extends Model
//
public $timestamps = false;
protected $fillable = ['summary','uID'];
public function user()
return $this->belongsTo(user::class,'uID','pID');
配置文件迁移文件
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateProfilesTable extends Migration
public function up()
// create profile table
Schema::create('profiles', function (Blueprint $table)
$table->increments('pID');
$table->timestamp('created_at')->useCurrent();
$table->string('summary')->default('');
$table->integer('uID')->unsigned();
$table->foreign('uID')->references('uID')->on('users')->onDelete('cascade');
);
配置文件控制器文件
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\profile;
class ProfileController extends Controller
public function store(Request $request)
// used to store user profile after validation
$this->validate($request,[
'summary' => 'required'
]);
$profile = new profile([
'summary' => $request->get('summary'),
]);
$profile->save();
return redirect()->route('profile.create')->with('success','Profile created');
【问题讨论】:
你试过给uID
一个默认值吗?
我使用 nullable() 作为默认值,问题消失了,但随后它使 uID 为空。我希望在不断添加用户和相关配置文件时将 uID 设置为 User('uID')。
【参考方案1】:
更改您的迁移文件, 由于您想稍后定义您的关系,所以您的外国 id 字段应该可以为空。
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateProfilesTable extends Migration
public function up()
// create profile table
Schema::create('profiles', function (Blueprint $table)
$table->increments('pID');
$table->timestamp('created_at')->useCurrent();
$table->string('summary')->default('');
$table->integer('uID')->nullable()->unsigned();
$table->foreign('uID')
->references('uID')
->on('users')
->onDelete('cascade');
);
如果您想在创建配置文件后分配登录用户,
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\profile;
class ProfileController extends Controller
public function store(Request $request)
// used to store user profile after validation
$this->validate($request,[
'summary' => 'required'
]);
$profile = new profile([
'summary' => $request->get('summary'),
'uID' => auth()->user()->id,
]);
$profile->save();
return redirect()->route('profile.create')->with('success','Profile created');
【讨论】:
【参考方案2】:如果您没有在程序中提供值,则需要在表定义级别提供默认值。
根据您的描述,您似乎缺少在创建用户记录后创建个人资料。
【讨论】:
我使用 nullable() 作为默认值,问题就消失了,但是如何将 uID 设置为 User('uID')。 uID 是引用用户('uID')的外键。我想继续添加新用户及其关联的配置文件,而无需在配置文件表中手动设置 uID 外键。 因此,您将使用 ID 添加用户作为自动增量,并且在您需要创建新配置文件时没有最后一个自动增量序列值。我对吗?尝试提供选择用户对象以获取自动增量值。 是的。我如何实施您的建议?我是否在 $profile->save() 之前添加 $profile['uID'] = $profile->user()->uID @AmartyaBarua:那不正确。在 $profile->user() 那时可能会有空值。在最坏的情况下,您需要调用数据库上的类似 SELECT * FROM users WHERE firstname = '...' AND lastname = '...' AND email = '...' 来让您的自动增量返回到您的程序。我不知道 Laravel 的工作机制。许多框架还会在将实体发送到数据库后自动更新实体以获取数据库数据。以上是关于SQLSTATE [HY000]:一般错误:1364 字段 'uID' 没有默认值的主要内容,如果未能解决你的问题,请参考以下文章
SQLSTATE [HY000]:一般错误:1364 字段“标题”没有默认值
PDO 错误:SQLSTATE [HY000]:一般错误:2031
SQLSTATE[HY000]:一般错误:在 Laravel 中迁移期间出现 1005