将多个复选框保存到一列中

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将多个复选框保存到一列中相关的知识,希望对你有一定的参考价值。

我试过不同的方法将多个复选框保存到数据库中。我现在非常接近但只是最后一个复选框值保存到数据库中。我想要他们所有,我无法做到。这是我的html代码。

<div class="col-xl-12">                     
<label>1st</label>
<input type="checkbox" name="data[]" value="00101"/>
<label>2nd</label>
<input type="checkbox" name="data[]" value="00102"/>
<label>3rd</label>
<input type="checkbox" name="data[]" value="00103"/>
<label>4th</label>
<input type="checkbox" name="data[]" value="00104"/>
</div>

在我的控制器中。

  public function store(Request $request)
{

    $this->validate($request, array(
        'staff' => 'nullable',
        'dmc' => 'nullable',
        'workdone' => 'nullable',
        'product_id' => 'nullable'
    ));

    $ltjob = new Ltjob;
    $ltjob->staff = $request->staff;
    $ltjob->dmc = $request->dmc;
    $ltjob->product_id = $request->product_id;
    foreach ($request->input("data") as $data){
    $ltjob->workdone= $data;
}
    $ltjob->save();
    return redirect()->route('ltjobs.create');
}

仍保存最后一个复选框当我在dd($request->input("data"));之前尝试foreach它给了我这个:

  array:3 [▼
  0 => "00101"
  1 => "00102"
  2 => "00104"
]

并节省了00104。

答案

这是一个坏主意(阅读有关数据库规范化的内容),但您可以通过getter和setter来实现:

public function getDataAttribute()
{
    return !empty($this->attributes['data']) ? explode(',', $this->attributes['data']) : [];
}


public function setDataAttribute($value)
{
   $this->attributes['data'] = implode(',', $value) ? implode(',', $value) : '';
}
另一答案

如果要在同一字段中注册多个字段,可以使用

$table->json('workdone');

因为您没有尝试使用循环,所以每次运行循环时都要对workdone字段进行赋值。由于这个原因,最后一个值是值。

将它们添加到模型文件中:

protected $ casts = [   'workdone' => 'array' ];

你可以通过定义来解决它。

最后,在注册时,

$ltjob->workdone = $ request->input('data')

另一答案

如果您阅读migrations in the documentation,您可以看到列。在我看来,你应该使用json列。

以上是关于将多个复选框保存到一列中的主要内容,如果未能解决你的问题,请参考以下文章

PHP传值问题! 例:A、B为两个页面,我在A中获取一个ID值,传送给B,那么AB中代码怎么写!

pycharm中代码怎样整体向右移动

Eclipse中代码格式化配置

在antd vue的表格显示中,合并多个字段到一列及自定义显示样式

实体框架将集合属性映射到一列

单击按钮时如何将多个复选框值保存到 Firebase