如何使用 Laravel 将数据加载到 Select2 中

Posted

技术标签:

【中文标题】如何使用 Laravel 将数据加载到 Select2 中【英文标题】:How to load data into Select2 with Laravel 【发布时间】:2018-06-12 09:35:02 【问题描述】:

我正在尝试将从数据库中提取的选定值加载到 Select2 中。 ID 值保存在 JSON 字段中,该字段包含 id 值或我作为“全部”管理的字段“*”。

这是我的控制器方法:

$data['field_id'] = array();
$field_id_array = json_decode(User::find($id) -> field_id);
if( $field_id_array !== null ) 
    $field_array = Campo::whereIn('id',$field_id_array)->pluck('field_name','id');
    if( in_array( '*' , $field_id_array ) ) 
        $field_array -> prepend( 'All' , '*' );
    
    $data['field_id'] = $field_array;
    
return view('create', $data);

这是我的视图,我正在使用 Blade:

<select id="field_id" name="field_id[]" multiple>
    @if(!empty($field_id))
        @foreach($field_id as $f)
            <option value = "!! $f->id !!" selected >!! $f->field_name !!
            </option>
        @endforeach
    @endif
</select>

显示的错误是:

试图获取非对象的属性

如果我在视图循环中只使用!! $c !!,我没有弄错,但它只显示字段field_name

我正在使用 Select2 和 ajax 搜索,但我没有发布代码,因为我认为控制器方法中的错误是 99.9%。

有人有解决问题的想法吗?

【问题讨论】:

【参考方案1】:

Collection::pluck 方法在您的情况下返回关联数组而不是对象数组,这就是为什么您的循环应该如下所示:

@foreach($field_id as $id => $field_name)
    <option value = " $id " selected > $field_name </option>
@endforeach

【讨论】:

【参考方案2】:

如果您使用blade 并且使用pluck 创建只有2 种类型的数组。您可以使用此语法将 $field_array 传递给视图:

Form::select('field_id[]',
                $field_array,
                '', array('class'=>'your-class',
                          'id' => 'field_id',
                          'multiple'))

【讨论】:

以上是关于如何使用 Laravel 将数据加载到 Select2 中的主要内容,如果未能解决你的问题,请参考以下文章

Laravel ajax存储请求errormessage,数据附加到视图

Laravel 5:如何将播种器类添加到自动加载?

将数据加载到 qtableWidget PyQt5

如何将路线返回到laravel中的视图

如何在laravel中使用jquery将行添加到数据表中

如何使用 Ajax 加载过滤后的数据,而无需在 laravel 中重新加载整个页面