PHP - Select2 在从 ajax 加载数据时动态设置多个选定值

PHP - Select2 dinamically set multiple selected values when loading data from ajax

您好,我正在尝试导入数据并将其显示为在多选 2 中选中。 下面的代码可以很好地带来所有数据,但我不知道如何添加所选信息。

在我的数据库中,所选选项所在的 table 是“ejecutivo_agencia”,并且有两列,id_agencia 和 id_comercial。

select2 带来了所有的代理,我需要将保存在 ejecutivo_agencia 中的那些标记为选中。

这是我的html: <select class="form-control" name="agencia[]" id="listadoAgencias"></select>

这是我的 ajax:

$('#listadoAgencias').select2({
        width: '100%',
        placeholder: 'Buscar agencia por Nombre o Código',
        language: 'es',
        multiple: true,
        ajax: {
            url: '<?php echo base_url("ajax/ajax_agencias/") ?>',
            type: "post",
            dataType: 'json',
            delay: 250,
            data: function(params) {
                return {
                    searchTerm: params.term // search term
                };
            },
            processResults: function(response) {
                return {
                    results: response
                };
            },
            cache: true
        },
        escapeMarkup: function(markup) {
            return markup;
        }

    });

这是我的 php 代码:

public function ajax_agencias()
    {
        $searchTerm = $_POST['searchTerm'];

        $this->db->select('*');
        $this->db->where("CodigoZARO like '%" . $searchTerm . "%' ");
        $this->db->or_where("Nombre_AGENCIA like '%" . $searchTerm . "%' ");
        // $this->db->order_by("Nombre_AGENCIA", 'ASC');
        $this->db->order_by("CodigoZARO", 'ASC');
        $fetched_records = $this->db->get('agencias', 60);
        $agencias = $fetched_records->result_array();

        // Initialize Array with fetched data
        $data = array();

        foreach ($agencias as $a) {

            $data[] = array("id" => $a['CodigoZARO'], "text" => $a['CodigoZARO'] . ' - ' . $a['Nombre_AGENCIA']);
        }

        echo json_encode($data);
    }

我按照这篇文章解决了它:https://select2.org/programmatic-control/add-select-clear-items#preselecting-options-in-an-remotely-sourced-ajax-select2

这是我的 ajax:

$('#listadoAgenciasEdit').select2({
        width: '100%',
        placeholder: 'Buscar agencia por Nombre o Código',
        language: 'es',
        multiple: true,
        ajax: {
            url: '<?php echo base_url("ajax/ajax_agencias/") ?>',
            type: "post",
            dataType: 'json',
            delay: 250,
            data: function(params) {
                return {
                    searchTerm: params.term // search term
                };
            },
            processResults: function(response) {
                return {
                    results: response
                };
            },
            cache: true
        },
        escapeMarkup: function(markup) {
            return markup;
        }

    });

    var listadoAgencias = $('#listadoAgenciasEdit');
    $.ajax({
        type: 'POST',
        dataType: 'json',
        data: {
            id_comercial: listadoAgencias.data('id')
        },
        url: '<?php echo base_url("ajax/ajax_agencias_selected/") ?>'
    }).then(function(data) {
        console.log(data);
        // create the option and append to Select2
        var option = new Option(data[0].text, data[0].id, true, true);
        listadoAgencias.append(option).trigger('change');

        // manually trigger the `select2:select` event
        listadoAgencias.trigger({
            type: 'select2:select',
            params: {
                data: data
            }
        });
    });

这是我的 php 代码:

public function ajax_agencias()
    {
        $searchTerm = $_POST['searchTerm'];

        $this->db->select('*');
        $this->db->where("CodigoZARO like '%" . $searchTerm . "%' ");
        $this->db->or_where("Nombre_AGENCIA like '%" . $searchTerm . "%' ");
        // $this->db->order_by("Nombre_AGENCIA", 'ASC');
        $this->db->order_by("CodigoZARO", 'ASC');
        $fetched_records = $this->db->get('agencias', 60);
        $agencias = $fetched_records->result_array();

        // Initialize Array with fetched data
        $data = array();

        foreach ($agencias as $a) {

            $data[] = array("id" => $a['CodigoZARO'], "text" => $a['CodigoZARO'] . ' - ' . $a['Nombre_AGENCIA']);
        }

        echo json_encode($data);
    }

    public function ajax_agencias_selected()
    {        

        $id_comercial = '';

        if(isset($_POST['id_comercial'])){
            $id_comercial = $_POST['id_comercial'];
        }
        
        $this->db->select('*');
        $this->db->from('ejecutivo_agencia');
        $this->db->where('ejecutivo_agencia.id_comercial', $id_comercial);
        $this->db->join('agencias', 'ejecutivo_agencia.id_agencia = agencias.CodigoZARO');        
        $fetched_records = $this->db->get();        
        $selected = $fetched_records->result_array();
        // var_dump($selected); exit;
        // Initialize Array with fetched data
        $data = array();

        foreach ($selected as $a) {

            $data[] = array("id" => $a['CodigoZARO'], "text" => $a['CodigoZARO'] . ' - ' . $a['Nombre_AGENCIA']);
        }

        echo json_encode($data);
    }