我尝试了不同的方法将多个复选框保存到数据库中。我现在非常接近但只是最后一个复选框值保存到数据库中。我想要他们所有,我无法做到。这是我的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。
答案 0 :(得分:1)
这是一个坏主意(阅读有关数据库规范化的内容),但您可以通过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) : '';
}
答案 1 :(得分:1)
如果要在同一字段中注册多个字段,可以使用
$table->json('workdone');
因为您没有尝试使用循环,所以每次运行循环时都要对workdone字段进行赋值。由于这个原因,最后一个值是值。
将它们添加到您的模型文件中:
protected $ casts = [
'workdone' => 'array'
];
你可以通过定义来解决它。
最后,在注册时,
$ltjob->workdone = $ request->input('data')
答案 2 :(得分:0)
如果您阅读migrations in the documentation,则可以看到列。 在我看来,你应该使用json列。