【问题标题】:Laravel form model binding for many to many select input用于多对多选择输入的 Laravel 表单模型绑定
【发布时间】:2014-07-22 12:53:14
【问题描述】:

clientsassets 之间存在多对多关系。 对于我的编辑客户端表单,我有一个多选框,用户可以使用该框选择多个assets 附加到客户端。该表单使用模型绑定,因此它会自动使用现有客户端数据填充字段。

模型绑定适用于表单中除多选之外的所有字段。这是我的观点:

{{ Form::model($client, ['route' => ['clients.update', $client->id], 'class' => '', 'method' => 'put']) }}

{{ Form::label('name', 'Name', $label_attributes) }}
{{ Form::text('name', null, array('class'=>'form-control')) }}

{{ Form::label('assets', 'Client Benchmarks (Select multiple)', $label_attributes) }}
{{ Form::select('assets[]', $assets, null, array('multiple' => true, 'class' => 'form-control')); }}

当我提交表单时,关系通过我的控制器中的sync 方法成功保存数据(update 方法):

$client = Client::find($id);
$client->name = Input::get('name');    
$assets = Input::has('assets') ? Input::get('assets') : array();
$client->assets()->sync($assets);
$client->save();

另外,如果我直接输出客户端资产,它们可以在我的表单视图的模型集合中访问:

<?php print_r($client->assets); ?>

如何获取表单以使用现有选择填充选择框?

【问题讨论】:

    标签: php laravel laravel-4


    【解决方案1】:
    echo Form::select('assets[]', $assets, array(1,2), array('multiple' => true));
    

    据我所知,即使使用表单,它也不会默认为您设置所有选定的值 模型绑定

    这是原生 formBuilder 方法的样子:

    public function select($name, $list = array(), $selected = null, $options = array())
    

    【讨论】:

    • 是的,这并不理想,因为能够在表单中的所有字段上使用模型绑定会很好。看起来我需要手动将选定的值传递给 select() 方法。
    • 恐怕,我同意这没有多大意义,但传入一个当前“活动”值的数组并不难
    • 确实,虽然我需要做一些像array_pluck($client-&gt;assets-&gt;toArray(), 'id') 这样的事情,这并不是最优雅的事情。
    • 你可以使用 laravel 的 'lists' 代替 :) (或 php 的 array_column)
    猜你喜欢
    • 1970-01-01
    • 2014-08-28
    • 2016-06-11
    • 2014-07-27
    • 2018-04-11
    • 2013-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-02-24
    相关资源
    最近更新 更多