ErrorException (E_NOTICE) Преобразование массива в строку в методе обновления Laravel - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь исправить процесс обновления, у меня есть следующая модель, которая связана с другими моделями и таблицами:

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 переменной $ data, вот результат:

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

1 Ответ

1 голос
/ 19 июня 2020

Если у вас есть update () delete 'array ()', поскольку вы уже определили массив с помощью скобок '[]'

Возможно, стоит изменить ваш управляющий код на следующий:

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 в отдельную таблицу.

...