我正在使用this多选下拉插件。我可以在存储方法期间在下拉列表中获取所选项目的所有ID。但是在编辑方法期间,当我尝试加载具有多个值的实体时,我无法在下拉列表中将项目标记为已选中。
所以例如 - 假设我正在使用Contacts。每个联系人都可以属于许多类别。联系人和类别之间存在belongsToMany关系。每当我添加新联系人时(如果用户选择了多个类别),我会获得所有类别的ID并将其分配给联系人。现在,当我试图再次加载联系人时,我必须显示为此联系人选择的类别列表 - 到目前为止我无法这样做。
答案 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'));
}
在您的共享表单中,即使该联系人尚未保留,也始终可以使用该联系人。