将多个复选框保存到一列中
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中代码怎么写!