SQLSTATE[HY000]:一般错误:1364 字段"id"在 Laravel 6 中没有默认值



在这里,我试图将数据插入数据库中,但由于某些原因,我无法将数据插入到数据库中。这就是错误:

SQLSTATE[HY000]:一般错误:1364字段"id"没有默认值(SQL:插入到stages(codenamedescriptionupdated_atcreated_at(值(32、dfs、vc、2020-04-14 06:02:57、2020-04-1 4 06:02:02:57((">

我的代码在这里:

StageController.php

<?php

namespace AppSysHttpControllers;
use AppHttpControllersController;
use IlluminateHttpRequest;
use AppSysModelStage;
class StageController extends Controller
{
public function index(Request $request)
{  
$per_page = $request->per_page ? $request->per_page : 5;
$sort_by = $request->sort_by;
$order_by = $request->order_by;
return response()->json(['stages' => Stage::orderBy($sort_by, $order_by)->paginate($per_page)],200);
}
public function store(Request $request)
{
$location= Stage::create([
'code' =>$request->code,
'name' =>$request->name,
'description' =>$request->description
]);
return response()->json(['stage'=>$stage],200);
}

public function show($id)                                                                                                                                                           
{
$stages = Stage::where('code','LIKE', "%$id%")->orWhere('name','LIKE', "%$id%")->orWhere('description', 'LIKE', "%$id%")->paginate();
return response()->json(['stages' => $stages],200);
}

public function update(Request $request, $id)
{
$stage = Stage::find($id);
$stage->code  = $request->code;
$stage->name  = $request->name;
$stage->description  = $request->description;
$stage->save(); 
return response()->json(['stage'=>$stage], 200);
}
public function destroy($id)
{
$stage = Stage::where('id', $id)->delete();
return  response()->json(['stage'=>$stage],200);
}
public function deleteAll(Request $request){
Stage::whereIn('id', $request->stages)->delete();
return response()->json(['message', 'Records Deleted Successfully'], 200);
}
}

Stage.php

<?php
namespace AppSysModel;
use IlluminateDatabaseEloquentModel;
class Stage extends Model
{
protected $guarded = [];
}

我的迁移文件:

<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class CreateStagesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('stages', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('original_id',36)->default('0')->index();
$table->string('code',10)->index()->nullable();
$table->string('name',100);
$table->string('description',200)->nullable();
$table->char('created_by',36)->index();
$table->char('edited_by',36)->index()->nullable();
$table->timestamps();
$table->foreign('created_by')->references('id')->on('users');
$table->foreign('edited_by')->references('id')->on('users');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('stages');
}
}

对于laravel 5.6+,可以使用Str::uuid()生成uuid字符串;

use IlluminateSupportStr;
...
public function store(Request $request)
{
$uuid = Str::uuid()->toString();
$location= Stage::create([
'id' => $uuid,
'code' =>$request->code,
'name' =>$request->name,
'description' =>$request->description
]);
return response()->json(['stage'=>$stage],200);
}

对于laravel 5.6以下的版本,可以使用RamseyUuidUuid

use RamseyUuidUuid;
...
public function store(Request $request)
{
$uuid = Uuid::uuid1()->toString();
...
return response()->json(['stage'=>$stage],200);
}

或者,您可以编写一个生成uuid的引导方法来创建,Eloquent会自动为每个创建方法设置id=uuid。如果有许多具有主键uuid的模型,则可以编写一个特性并在每个模型中使用该特性。

use IlluminateSupportStr;
...
class Stage extends Model
{
/**
* Boot function from laravel.
*/
protected static function boot()
{
parent::boot();
static::creating(function ($model) {
$model->{$model->getKeyName()} = Str::uuid()->toString();
});
}
}

在我的情况下,我没有将该字段添加到模型中的可填充字段中

<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Flight extends Model
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = ['name'];
}

我刚刚在phpmyadmin中向id添加了一个auto_increment

最新更新