mysql - 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();
});
解决方案
你有 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
到单独的表中。
推荐阅读
- kubernetes - 新 GKE 集群上的 DNS 可能会出现问题
- userdefaults - 如何在 userdefault 中保存已检查的 tableview 行?
- python - pyowm 调用在自己的程序中有效,但在从其他程序调用时无效
- openoffice.org - 公式编辑器:sum 字符太小
- r - 基于 R 中的两个嵌套 id 变量,二进制变量的编码状态随时间变化
- html - 如何使我的图像在内部移动并在 HTML5 画布上更改图形?
- c# - 尽管我处理了 FormatException,但当我给出字母而不是数字时,此代码会输出未处理的 FormatException?
- typescript - VS2017:tsconfig.json 中的 OutDir 参数如何跳过目录?
- html - 将文本放在背景图像上
- java - 将 MySQL 连接到 java 应用程序 - VPS (ubuntu)