php - 如何根据 laravel 复选框值更新数据库
问题描述
我从数据库加载复选框,它们是否被选中,
<div class="row">
<div class="col-xs-12">
<div class="form-group">
@php
$json = $orders->data;
$json = json_decode($json, true);
$products = $json['order_info']['products'];
$data = '';
foreach ($products as $hitsIndex => $hitsValue) {
$data .= $hitsValue['type']. ', ';
}
$data = rtrim($data, ', ');
$agosProducts = Utility::constant('agos_products1');
@endphp
{{Html::validation($orders, 'product')}}
<label for="products" class="control-label">{{Translator::transSmart('app.Products', 'Products')}}</label><br><br>
@foreach($agosProducts as $product)
<label class="control-label "for="{{ $product['type'] }}">
<input id="{{ $product['type'] }}" name="{{ $product['type'] }}" type="checkbox" value="{{ $product['type'] }}"
@foreach ($products as $hitsIndex => $hitsValue)
@if(in_array($hitsValue['type'], $product)) checked=checked @endif
@endforeach
>
{{ $product['name'] }}
</label>
<br>
@endforeach
</div>
</div>
</div>
现在我想根据复选框值更新我的数据库。
例如,如果说我从数据库中加载复选框 1,而现在它未选中,我需要在数据库中更新它。
此代码我可以获得复选框的所有当前状态,但我不知道此代码的先前值。因此很难更新当前值的状态并在数据库中添加新状态,
$chks = array('multicolor','resizable','showRuler','namesNumbersEnabled');
foreach ($chks as $chk) {
$product->setAttribute($chk, (Input::has($chk)) ? true : false);
}
这是我保存在数据列中的 json 对象
{"user_token":"ad48c412-3866-4ac9-adf6-3328911ae46c",
"order_info":
{"order_id":"CGC12345678","company_id":32,"price":1000.5,"currency":"MYR",
"products":[
{"type":"HR_ECLAIM","name":"HREClaim","is_fixed_price":true,"price":500.5,"currency":"MYR"},
{"type":"HR_ELEAVE","name":"HRELeave","is_fixed_price":true,"price":500,"currency":"MYR"}
],
"total_invoices":200,"total_staffs":80},"url":"https://drive.google.com/open?id=1Is6QsnuMLu9ZIpqeEzR2O2Ve1wUyF92aVCg55kWsOgc"}
我加载 [order_info][products][type] 作为检查的产品,同时我从 env 文件加载所有产品。我只需要将选中的复选框产品保存在数据库中。
有人可以帮助我吗?
解决方案
这是我为我的问题所做的完整工作解决方案!
public function edit($id, $attributes){
$orders = (new Agos())->load($id);
$json = $orders->data;
$json = json_decode($json);
$checkedit= $attributes['check_list'];
if (is_array($checkedit) || is_object($checkedit))
{
foreach($checkedit as $chked1){
$exists = false;
foreach($json->products as $key => $val)
{
// update if products exists
if($val->type == $chked1) {
$val->status = 'true';
$exists = true;
}
if(array_key_exists('status', $val)) {}
else{ $val->status = 'false';}
}
if($chked1 == 'FIN_REPORTING')
{
$name = 'Finance reporting & book keeping';
}
elseif ($chked1 == 'FIN_ADVISORY')
{
$name = 'Finance Advisory';
}
elseif ($chked1 == 'PAYROLL_HRDB')
{
$name = 'PAYROLL_HRDB';
}
elseif ($chked1 == 'HR_ELEAVE')
{
$name = 'HR E-Leave';
}
else
{
$name = 'HR E-Claim';
}
//if products not exists add new products
if(!$exists) {
$newproduct = new \stdClass();
$newproduct->type = $chked1;
$newproduct->name = $name;
$newproduct->is_fixed_price = false;
$newproduct->currency = "MYR";
$newproduct->status = "true";
array_push($json->products, $newproduct);
}
}
}
//remove all products that have status = false
foreach($json->products as $index => $product) {
if ( $product->status == "false") {
unset($json->products[$index]);
}
}
$json->products = array_values($json->products);
json_encode($json, JSON_PRETTY_PRINT);
//remove status element from products
foreach($json->products as $index => $product) {
unset($product->status);
}
$json->products = array_values($json->products);
json_encode($json, JSON_PRETTY_PRINT);
$json->google_drive_url= $attributes['data'];
$json->remark= $attributes['remark'];
$json->status= $attributes['status'];
$json->total_invoices= $attributes['total_invoices'];
$json->total_staffs= $attributes['total_staffs'];
$json1 = json_encode($json);
$status = $attributes['status'];
$total_price = str_replace(',','', $attributes['total_price']);
DB::table('orders')
->where('id', $id)
->update(['data' => $json1,'status' => $status, 'price' => $total_price]);
}
推荐阅读
- r - 使用 ncdf4 包从 .csv 到 .nc 文件(ncvar_put 中的错误)
- matlab - 如何将 0.1 和 0.22 之间的数字扩大到更大的距离 0 和 1?
- c# - 绑定 SelectedIndexChanged
- java - 如何替换 2D java arraylist 中的空元素?
- javascript - canvas.getZoom() 在Angular8中使用fabricjs未定义
- python - Paho MQTT 客户端断开连接,重新连接后不再有消息传入
- ios - 孤立的工件 iMessage 扩展 - iOS 错误
- python - Django在退出管理页面时运行功能
- java - 无法在 servlet 中创建没有 web.xml 的第一个 api
- mysql - MYSQL CTE 递归更新