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

时间:2018-01-26 09:17:41

标签: laravel checkbox eloquent

我尝试了不同的方法将多个复选框保存到数据库中。我现在非常接近但只是最后一个复选框值保存到数据库中。我想要他们所有,我无法做到。这是我的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。

3 个答案:

答案 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列。