【问题标题】:SQLSTATE[HY000]: General error: 1364 Field 'id' doesn't have a default value in Laravel 6SQLSTATE [HY000]:一般错误:1364 字段 'id' 在 Laravel 6 中没有默认值
【发布时间】:2020-08-23 13:08:18
【问题描述】:

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

SQLSTATE[HY000]:一般错误:1364 字段“id”没有默认值(SQL:插入stagescodenamedescriptionupdated_at,@987654326 @) 值 (32, dfs, vc, 2020-04-14 06:02:57, 2020-04-14 06:02:57))"

我的代码在这里:

StageController.php

<?php


namespace App\Sys\Http\Controllers;

use App\Http\Controllers\Controller;

use Illuminate\Http\Request;

use App\Sys\Model\Stage;

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 App\Sys\Model;

use Illuminate\Database\Eloquent\Model;

class Stage extends Model
{
    protected $guarded = [];
}

我的迁移文件:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

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');
    }
}

【问题讨论】:

  • 插入需要生成id
  • @TsaiKoga 你能告诉我该怎么做吗????

标签: mysql laravel insert


【解决方案1】:

在我的例子中,我没有将该字段添加到我的模型中的可填写字段中

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = ['name'];
}

【讨论】:

    【解决方案2】:

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

    use Illuminate\Support\Str;
    ...
    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以下,可以使用Ramsey\Uuid\Uuid

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

    或者你可以编写一个用于创建创建uuid的引导方法,Eloquent会自动为每个创建方法设置id=uuid。如果有多个具有主键 uuid 的模型,您可以编写一个 trait 并在每个模型中使用此 trait。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 2019-05-06
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多