如何在开关输入值之间切换?

时间:2019-11-22 12:11:06

标签: html laravel

我有这个输入按钮:image

输入代码:

<div class="media">
 <label class="col-form-label m-r-10">Status Of System</label>
 <div class="media-body text-right icon-state">
 <label class="switch">
  <input 
      type="checkbox" 
      name="status" 
      value="{{ setting()->status == '1' ? 0 : 1 }}"
  >
  <span class="switch-state bg-primary"></span>
</label>

setting()->状态是辅助函数:

 if (! function_exists('setting') ) {
    function setting(){
      return \App\Setting::first();
  }
}

在状态栏中,默认值为1。

问题是当我尝试在10之间切换时。注意输入中的value属性,我尝试说数据库1中的列是否放置0否则放置1来切换值,但是这种方式不会运行find!如何做这样的事情:(

2 个答案:

答案 0 :(得分:0)

如果我正确理解了您的问题,请尝试以下操作:

根据设置值选中复选框:

<input 
    type="checkbox" 
    name="status" 
    @if(1 === setting()->status) checked @endif
>

您在这里从数据库中检索了status。如果存在且正好等于1,将选中该复选框。如果不是,则为未选中状态。

接下来,您要根据此复选框checked状态更改数据库值。

仅当选中复选框时,复选框字段才会出现在$request中。因此,尝试重构一下您的控制器:

$setting = \App\Setting::first(); // your setting
$setting->status = isset($request->status) ? 1 : 0; // if status exists in request, it means that checkbox was checked
$setting->save(); // update your database row

答案 1 :(得分:0)

问题仅是一个:

未选中复选框时,其值未插入请求中。因此,您必须在更新前检查该复选框的值是否存在。

所以不是

setting()->update($request->all());

您必须

$params = $request->all();
if(!isset($params['status'])) $params['status'] = 1;
setting()->update($params);

在Internet上还有另一种解决方案,即添加一个hidden输入,该输入具有相同的name以及如果未选中该复选框,则具有所需的值:

<input type="hidden" name="status" value="1">

但是我认为这只是一个肮脏的解决方法...但是您可以尝试一下