Laravel 4提交了多个复选框

时间:2015-08-05 19:28:09

标签: checkbox laravel-4 checked unchecked

我使用以下内容检查复选框是选中还是取消选中:

我的观点:

{{ Form::hidden('unchecked[]', $product->id) }}
{{ Form::checkbox('checkbox[]', $product->id) }}

我的控制器:

public function checkbox()
{
    $checkedIDs         = Input::get('checkbox');
    $uncheckedIDs       = Input::get('unchecked');

    if(is_array($uncheckedIDs))
    {
        Products::whereIn('id',$uncheckedIDs)->update(['checked' => '0']);
    }

    if(is_array($checkedIDs))
    {
        Products::whereIn('id',$checkedIDs)->update(['checked' => '1']);

    }

    return Redirect::to('index');
}

这很有效!但是......我还有一些隐藏字段,只有在单击复选框时才会出现。我可以选择的一系列数字的下拉列表。一旦我选中了一个复选框,就会出现下拉列表并从该下拉列表中选择一个数字,然后点击提交。使用以下代码,所有内容都保存在数据库中:

public function checkbox()
{
    $checkedIDs         = Input::get('checkbox');
    $uncheckedIDs       = Input::get('unchecked');

    $checkedNumbers         = Input::get('number');

    if(is_array($uncheckedIDs))
    {
        Products::whereIn('id',$uncheckedIDs)->update(['checked' => '0']);
    }

    if(is_array($checkedIDs))
    {
        Products::whereIn('id',$checkedIDs)->update(['checked' => '1']);
        foreach($checkedNumbers as $id => $number) Products::where('id',$id)->update(['number'=>$number]);

    }

    return Redirect::to('index');
}

因此,这实际上遍历已提交的所有number []值并相应地更新数据库。到目前为止,一切都按我的意愿运作。

现在问题。当我再次打开表单时,会检查先前保存的复选框,并且相应的下拉列表也会显示数字。取消选中一个复选框并保存后,该数字不会被删除,而一旦我再次打开表单,复选框就会取消选中。我基本上需要的是,以下位代码只能更新被检查复选框中的数字:

foreach($checkedNumbers as $id => $number) Products::where('id',$id)->update(['number'=>$number]);

但到目前为止,我还没弄清楚如何实现这一目标。有什么指针吗?

1 个答案:

答案 0 :(得分:0)

修正了它,用它来检查是否选中了复选框。

查看:

{{ Form::hidden('checkbox['.$product->id.']', '0') }}
{{ Form::checkbox('checkbox['.$product->id.']', $product->id) }}

控制器:

public function checkbox()
{
    $checkboxes         = Input::get('checkbox');

    foreach ($checkboxes as $key => $value)
    {
        if($value !== '0')
        {
            Products::where('id', '=', $key) ->update(['chkupdate' => '1']);
        }
        else {
            Products::where('id', '=', $key) ->update(['chkupdate' => '0']);
        }           
    }
        return Redirect::to('index');
}