如何从 Laravel 控制器发布自定义值

问题描述 投票:0回答:2

我正在尝试从控制器添加一个值并将其与从视图中获得的其他输入一起发送到 mysql。我该怎么做?

我尝试使用 array_merge,尝试将它们放在同一个变量中并使用 Laravel 的 create 发送它,但无济于事。

这是代码

价值

 $id = 0;
 $id++;

 $time = "2019-01-01 00:00:00";
 $date = new Carbon( $time );
 $d = $date->format('Y');

   $fmipa = 0;
   $fkh = 0;
   $lastNumber = 0;
   $fk = $request->get('fakultas');
   if($fk == 'FMIPA'){
     $fmipa++;
     $fk = 42;
     if($fmipa < 10){
        $fmipa="00". $fmipa;
        $lastNumber = $fmipa;
     }else if($fmipa < 100){
        $fmipa="0" . $fmipa;
        $lastNumber = $fmipa;
     }else{
        $fmipa = $fmipa;
        $lastNumber = $fmipa;
     }
   }else{
     $fkh++;
     $fk = 41;
     if($fkh < 10){
       $fkh="00". $fkh;
       $lastNumber = $fkh;
     }else if($fkh < 100){
       $fkh="0" . $fkh;
       $lastNumber = $fkh;
     }else{
       $fkh = $fkh;
       $lastNumber = $fkh;
     }
    }

$nim = $d . $fk . "101" . $lastNumber;

Store()函数


    $validator = Validator::make($request->input(), array(
     'nama' => 'required',
     'alamat' => 'required',
     'fakultas' => 'required',
    ));

    if ($validator->fails()) {
      return response()->json([
        'error'    => true,
        'messages' => $validator->errors(),
      ], 422);
    }

   $mahasiswa = Dashboard::create($request->all() + ['nim' => $nim]);


   return response()->json([
      'error' => false,
      'mhs'  => $mahasiswa,
   ], 200);

我将它们分开以便于阅读,但如果您想知道值的代码是否位于 store() 函数中。

我希望它将值发布到数据库,但我从 XHR 的响应中得到的是

500 内部服务器错误

SQLSTATE[HY000]:一般错误:1364 字段“nim”没有默认值

php laravel eloquent
2个回答
2
投票

替换商店功能如下

$dashboard = new Dashboard();
$dashboard->nama = $request->nama;
$dashboard->alamat = $request->alamat;
$dashboard->fakultas = $request->fakultas;
$dashboard->nim = $nim;
$dashboard->save();

1
投票

发生错误的原因是您的表仪表板的列 nim 不可为空并且没有默认值。

在模型仪表板内

protected $fillable = [... , 'nim'];

当您尝试创建仪表板时,您没有为 nim 赋予值,这导致了错误。

如果您确实希望 nim 列可为空,您可以在迁移文件中添加该功能。

迁移文件

...
$table->string('nim')->nullable();
...

使用 php artisan migrate:refresh 重新运行迁移

如果你想手动检查,可以在DashboardController中尝试

//If request does not have nim
if(!$request->has('nim') && !empty($request->nim)){
    $request->nim = "";
}
© www.soinside.com 2019 - 2024. All rights reserved.