首页 > 解决方案 > Laravel更新方法中的ErrorException(E_NOTICE)数组到字符串转换

问题描述

我正在尝试修复更新过程,我有以下模型属于与其他模型和表的关系:

protected $table = 'voting_results';

protected $fillable = ['proceding_id', 'candidate_id', 'politicparty_id', 'total'];

从表格中,我通过以下方式发送数据:

{!! Form::model($electoralrecord, ['method' => 'PATCH','route' => ['electoralrecords.update', $electoralrecord->id], 'enctype' => 'multipart/form-data']) !!}

    <input type="number" class="form-control" id="total" name="total[]" value="{{ $candidate->total }}" placeholder="Values">

    <button class="btn btn-success" type="submit" data-toggle="tooltip" rel="tooltip" data-placement="top" title="Guardar cambios"><i data-feather="save"></i> Save</button>

{!! Form::close() !!}

在控制器中,我正在接收并尝试更新表中的数据,如下所示:

public function update(Request $request, $id)
{

    $data = $request->all(); 

    $ids = $request->id[0];
    $totals = $request->total[0];

    DB::table('voting_results')->where('id', $ids)
        ->update(array(['total' => $totals]));

    return redirect()->route('electoralrecords.index')
                    ->with('success','Record update!!!');

}

但它返回 ErrorException (E_NOTICE) 数组到字符串的转换。

可以指导我的人,因为我已尝试进行转换以存储数组数据。

对变量 $ 数据进行 dd 处理,结果如下:

array:4 [▼
  "_method" => "PATCH"
  "_token" => "dHZlKbY1x2xOteQ31pPIMkmwQc3BfHIRWrXlKU87"
  "id" => "1"
  "total" => array:27 [▼
    0 => "12"
    1 => "10"
    2 => "0"
    3 => "0"
    4 => "0"
    5 => "0"
    6 => "0"
    7 => "0"
    8 => "0"
    9 => "0"
    10 => "0"
    11 => "0"
    12 => "0"
    13 => "0"
    14 => "0"
    15 => "0"
    16 => "0"
    17 => "0"
    18 => "0"
    19 => "0"
    20 => "0"
    21 => "0"
    22 => "0"
    23 => "0"
    24 => "0"
    25 => "0"
    26 => "4"
  ]
]

这是一个模式和关系

Schema::create('voting_results', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('proceding_id')->unsigned()->nullable();
    $table->foreign('proceding_id')
        ->references('id')
        ->on('proceedings')
        ->onDelete('cascade');
    $table->integer('candidate_id')->unsigned()->nullable();
    $table->foreign('candidate_id')
        ->references('id')
        ->on('candidates')
        ->onDelete('cascade');
    $table->integer('politicparty_id')->unsigned()->nullable();
    $table->foreign('politicparty_id')
        ->references('id')
        ->on('politicparty')
        ->onDelete('cascade');
    $table->string('total');
    $table->timestamps();
});

标签: mysqllaravellaravel-5.8laravel-6laravel-7

解决方案


你有 update() 删除 'array()' 部分,因为你已经使用方括号 '[]' 定义了一个数组</p>

可能值得将您的控制代码更改为以下内容:

public function update(Request $request, $id)
{
    $data = $request->all(); 
    $totals = implode(',', $data['total']);

    VotingResult::where('id', $data['id'])
        ->update(array(['total' => $totals]));

    return redirect()->route('electoralrecords.index')
                    ->with('success','Record update!!!');
}

此外,您需要解释您拥有哪些列以及它们的用途。即我不知道是否total应该包含整数或字符串?它应该是您在 中的总数的总和$request->total吗?

也可以$cast用来指示其中一些变量是什么,即:

class VotingResult extends Model
{
   protected $cast = [
      'total' => 'json',
      'proceding_id' => 'integer',
   ];
}

如果total将来必须对列进行数学运算,那么最好将列类型更改total为整数/双精度,或者如果您需要存储每个单个total值以移动total到单独的表中。


推荐阅读