首页 > 解决方案 > laravel eloquent 没有将所有模型参数保存在表中

问题描述

模型:

protected $table = 'citas_odontologicas';
protected $fillable = ['fecha','hora', 'procedimiento_id', 'paciente_id'];

移民:

public function up()
{
    Schema::create('citas_odontologicas', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->timestamps();
        $table->string('fecha');
        $table->string('hora');
        $table->bigInteger('procedimiento_id')->unsigned();
        $table->foreign('procedimiento_id')->references('id')->on('procedimientos');
        $table->bigInteger('paciente_id')->unsigned();
        $table->foreign('paciente_id')->references('id')->on('pacientes');
    });
}

控制器:

public function agendarCita($fecha, $hora, $procedimiento, $paciente)
{
    $citaOdontologica = new CitaOdontologica($fecha, $hora, $procedimiento, $paciente);
    $citaOdontologica->save();
    dd($citaOdontologica);
}

错误:

Illuminate\Database\QueryException SQLSTATE[HY000]: General error: 1364 Field 'fecha' doesn't have a default value (SQL: insert into citas_odontologicas( updated_at, created_at) values (2020-01-25 20:01:22, 2020-01- 25 20:01:22))

标签: phplaraveleloquent

解决方案


Laravel Model 提供静态 API 来创建对象。如果要使用new ClassName()符号,则必须覆盖模型构造函数。记住_id关系字段的后缀(如果您没有更改它)。

但我建议使用Model::create()Model::make()方法,如下所示:

$citaOdontologica = CitaOdontologica::make([
  'fecha' => $fecha, 
  'hora' => $hora, 
  'procedimiento_id' => $procedimiento, 
  'paciente_id' => $paciente
]);
$citaOdontologica->save();

甚至更简单:

$citaOdontologica = CitaOdontologica::create([
  'fecha' => $fecha, 
  'hora' => $hora, 
  'procedimiento_id' => $procedimiento, 
  'paciente_id' => $paciente
]);

推荐阅读