如何在laravel multiselect下拉列表中选中已选中的项目

时间:2014-05-01 05:53:08

标签: php laravel laravel-4 multi-select

我正在使用this多选下拉插件。我可以在存储方法期间在下拉列表中获取所选项目的所有ID。但是在编辑方法期间,当我尝试加载具有多个值的实体时,我无法在下拉列表中将项目标记为已选中。

所以例如 - 假设我正在使用Contacts。每个联系人都可以属于许多类别。联系人和类别之间存在belongsToMany关系。每当我添加新联系人时(如果用户选择了多个类别),我会获得所有类别的ID并将其分配给联系人。现在,当我试图再次加载联系人时,我必须显示为此联系人选择的类别列表 - 到目前为止我无法这样做。

2 个答案:

答案 0 :(得分:1)

特拉维斯的答案对我帮助很大。因此,我将此标记为正确答案。但是我必须做一些更新。以下是我必须要做的事情..

            @if(isset($contact))
            <?= Form::select(
                'category_ids[]',
                Category::lists("name", "id"),
                $contact->categories()->select('categories.id AS id')->lists('id'),
                [
                    'class' => 'form-control multiselect',
                    'multiple'
                ]
            )?>
        @else
            {{ Form::select("category_ids[]", Category::lists("name", "id"), Input::old("category_id"), array( "class" => "form-control multiselect" , "multiple" => "multiple" )) }}
        @endif

我使用相同的表单进行创建和编辑操作,因此在创建表单中,它在contact-&gt;类别行上抛出了一个错误,这是真的,因为在create方法中,contact是null。因此检查。

答案 1 :(得分:0)

以下是我在Laravel 4中完成多项选择的方法:

<?= Form::select(
    'category_ids[]',
    App::make('Category')->lists('name', 'id'),
    $contact->categories()->select('categories.id AS id')->lists('id'),
    [
        'class' => 'form-control',
        'multiple'
    ]
)?>

生成的选择标记如下所示:

<select class="form-control" multiple="multiple" name="category_ids[]">
    <option value="1" selected="selected">category 1</option>
    <option value="2">category 2</option>
</select>

然后,当您更新时,您需要在验证模型后添加此行:

$contact->categories()->sync(Input::get('category_ids'));

在创建和编辑表单中使用它。在create行动中, $contact->categories()将为空,因此不会填充选择,但在edit操作中,您将获得正确选择的值。

修改:为了共享这样的表单,您需要在contact操作中传递create模型的新实例,如下所示:

public function create()
{
    $contact = App::make('Contact');
    return View::make('contact.create', concat('contact'));
}

在您的共享表单中,即使该联系人尚未保留,也始终可以使用该联系人。