Php 如何在laravel multiselect下拉列表中将选定项目标记为已选中

Php 如何在laravel multiselect下拉列表中将选定项目标记为已选中,php,laravel,laravel-4,multi-select,Php,Laravel,Laravel 4,Multi Select,我正在使用多选下拉插件。在store方法期间,我可以在下拉列表中获取所选项目的所有ID。但是,在编辑方法期间,当我尝试加载具有多个值的实体时,我无法将项目标记为在下拉列表中选中 例如: 假设我与联系人一起工作。每个联系人可以属于许多类别。联系人和类别之间存在着归属关系。每当我添加新联系人时(如果用户选择了许多类别),我都会获取所有类别的id并将其分配给联系人。现在,当我再次尝试加载联系人时,我必须显示为此联系人选择的类别列表-这是我目前无法做到的。以下是我如何在Laravel 4中完成多重选择:

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

例如:
假设我与联系人一起工作。每个联系人可以属于许多类别。联系人和类别之间存在着归属关系。每当我添加新联系人时(如果用户选择了许多类别),我都会获取所有类别的id并将其分配给联系人。现在,当我再次尝试加载联系人时,我必须显示为此联系人选择的类别列表-这是我目前无法做到的。

以下是我如何在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'
    ]
)?>
在创建和编辑表单时都使用此选项。在
创建
操作中,
$contact->categories()
将为空,因此不会填充select,但在
编辑
操作中,您将获得正确选择的值

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

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

在您的共享表单中,$contact将始终可用,即使它尚未持久化。

Travis answers确实帮了我很大的忙。因此,我认为这是正确的答案。然而,我不得不做一些更新。下面是我必须做的

            @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
@if(isset($contact))
@否则
{{Form::select(“category_id[]”,category::list(“name”,“id”),Input::old(“category_id”),array(“class”=>“Form control multiselect”,“multiple”=>“multiple”)}
@恩迪夫

我在创建和编辑操作中使用相同的表单,因此在创建表单中,它在contact->categories行上向我抛出了一个错误,这是真的,因为在create方法中contact为null。这就是支票。

谢谢特拉维斯。这真的帮了我很大的忙。把你的答案作为答案。很高兴我能帮上忙,加根。只是想评论一下,说你不需要在表单中使用这个条件。只需在创建操作中将联系人模型的新实例传递到视图中。通过这种方式,设置了contact变量,您可以使用我给出的示例,而无需任何条件。我编辑了我的答案来解释它。@TravisVignon。。有道理:)
public function create()
{
    $contact = App::make('Contact');
    return View::make('contact.create', concat('contact'));
}
            @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