Welcome Guest, Not a member yet? Register   Sign In
Datatable server side search on Entity
#1

(This post was last modified: 12-23-2022, 06:13 PM by pippuccio76.)

hi , sorry for english , this is my ajax method used for datatable :
Code:
public function ajax_data_from_conta(){

        $request = service('request');
        $postData = $request->getPost();
        $dtpostData = $postData['data'];
        $response = array();

        ## Read value
        $draw = $dtpostData['draw'];
        $start = $dtpostData['start'];
        $rowperpage = $dtpostData['length']; // Rows display per page
        $columnIndex = $dtpostData['order'][0]['column']; // Column index
        $columnname = $dtpostData['columns'][$columnIndex]['data']; // Column numero_conta
        $columnSortOrder = $dtpostData['order'][0]['dir']; // asc or desc
        $searchValue = $dtpostData['search']['value']; // Search value



        /*

['id','id_inventario','numero_conta','magazzino','fornitori_conto_lavoro','id_fase_tipo_prodotto_finito','username','codice_materiale','quantita','unita_misura','created_at','updated_at','deleted_at'];
        */

        ## Total number of records without filtering
        $conta_materiale_model = new Conta_materialeModel();
        $totalRecords = $conta_materiale_model->select('id')
                     ->countAllResults();

        ## Total number of records with filtering
        $totalRecordwithFilter = $conta_materiale_model->select('id_inventario')
            ->orLike('numero_conta', $searchValue)
            ->orLike('magazzino', $searchValue)
            ->orLike('fornitori_conto_lavoro', $searchValue)
            ->orLike('id_fase_tipo_prodotto_finito', $searchValue)
            ->orLike('username', $searchValue)
            ->orLike('codice_materiale', $searchValue)
            ->orLike('quantita', $searchValue)
            ->orLike('unita_misura', $searchValue)
            ->orLike('created_at', $searchValue)
            ->countAllResults();

        ## Fetch records
        $records = $conta_materiale_model->select('*')
            ->orLike('id_inventario', $searchValue) //foreign key
            ->orLike('numero_conta', $searchValue)
            ->orLike('magazzino', $searchValue)
            ->orLike('fornitori_conto_lavoro', $searchValue)
            ->orLike('id_fase_tipo_prodotto_finito', $searchValue) //foreign key
            ->orLike('username', $searchValue)
            ->orLike('codice_materiale', $searchValue)
            ->orLike('quantita', $searchValue)
            ->orLike('unita_misura', $searchValue)
            ->orLike('created_at', $searchValue) //date
            ->orderBy($columnname,$columnSortOrder)
            ->findAll($rowperpage, $start);

        $data = array();


        //print_r($records);
        //die();

        foreach($records as $record ){

            $data[] = array(
                "id"=>"<a href='/admin_Conta_materiale/eliminaRecord/".$record->id."' alt='elimina' class='btn btn-danger btn-xs' onClick=\"return confirm('Sei sicuro di voler eliminare il record?');\" title='elimina'><i class=\"fa-solid fa-trash\"></i></a>",
                "id_inventario"=>$record->id_inventario, //$record->inventario()->nome,
                "numero_conta"=>$record->numero_conta,
                "magazzino"=>$record->magazzino,
                "fornitori_conto_lavoro"=>$record->fornitori_conto_lavoro,
                "id_fase_tipo_prodotto_finito"=>$record->tipo_prodotto_finito()->nome.' '.$record->fase_tipo_prodotto_finito()->numero,
                "username"=>$record->username,
                "codice_materiale"=>$record->codice_materiale,
                "quantita"=>$record->quantita,
                "unita_misura"=>$record->unita_misura,
                "created_at"=>$record->created_at,
            );
        }

        ## Response
        $response = array(
            "draw" => intval($draw),
            "iTotalRecords" => $totalRecords,
            "iTotalDisplayRecords" => $totalRecordwithFilter,
            "aaData" => $data,
            "token" => csrf_hash() // New token hash
        );

        return $this->response->setJSON($response);
    }
And this is the view :
Code:
<?= $this->extend('templates/layout_admin') ?>

<?= $this->section('content') ?>

<link rel="stylesheet" href="https://cdn.datatables.net/1.12.1/css/jquery.dataTables.min.css">

<?= $this->endSection() ?>

<?= $this->section('content') ?>

    <!-- Page Header-->
<div class='card'>
        <div class='card-header'>
            <h4>Conta Materiale</h4>
        </div>
        <div class='card-body'>

      <div class="row " style="margin-right: 10px; margin-top: 20px;margin-bottom: 20px;">
<div class="col-md text-end">
<a  href="<?=base_url()?>/admin_Conta_materiale/inserisciRecord" class="btn btn-success" ><i class="fa fa-plus-square "></i>  Crea Conta Materiale </a>
</div>
</div>

      <div class="card-title d-flex align-items-center">
        <div><i class="bx bxs-user me-1 font-22 text-primary\"></i>
        </div>
        <h5 class="mb-0 text-primary"> Lista Conta_materiale</h5>
      </div>
            <div class="table-responsive">

                    <table id="tabella-catalogo" class="table dt-responsive activate-select cell-border table-hover stripe" style="width: 100%;">

                    <thead>
                    <tr>
                <th class=''><i class='mdi mdi-filter'></i> Opzioni </th>
<th class=''>Inventario</th>
<th class=''>Numero Conta</th>
<th class=''>Magazzino</th>
<th class=''>Fase</th>
<th class=''>Fornitore</th>
<th class=''>Username</th>
<th class=''>Codice Materiale</th>
<th class=''>Quantita</th>
<th class=''>Unita Misura</th>
<th class=''>Inserito </th>

</tr>
</thead>

</table>

</div>
</div>
</div>




<?= $this->endSection() ?>

<?= $this->section('script') ?>


<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/1.12.1/js/jquery.dataTables.js"></script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/buttons/2.2.3/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" charset="utf8" src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/buttons/2.2.3/js/buttons.html5.min.js"></script>
<script type="text/javascript" charset="utf8" src="https://cdn.datatables.net/select/1.5.0/js/dataTables.select.min.js"></script>



<!-- END Datatables -->



<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js"></script>
<script src="//cdn.datatables.net/plug-ins/1.10.13/sorting/datetime-moment.js"></script>

          <!-- Datatables -->

        <script>
            $(document).ready(function() {

                $.fn.dataTable.moment( 'DD-MM-YYYY HH:mm:ss');

                $("#tabella-catalogo").DataTable({
        'processing': true,
                        'serverSide': true,
                        'serverMethod': 'post',
                        'ajax': {
                            'url':"<?= '/ajaxDatatable/ajax_data_from_conta'?>",
                            'data': function(data){
                              // CSRF Hash
                              var csrfName = $('.txt_csrfname').attr('name'); // CSRF Token name
                              var csrfHash = $('.txt_csrfname').val(); // CSRF hash

                              return {
                                  data: data,
                                  [csrfName]: csrfHash // CSRF Token
                              };
                            },
                            dataSrc: function(data){

                              // Update token hash
                              $('.txt_csrfname').val(data.token);

                              // Datatable data
                              return data.aaData;
                            }
                        },
                        'columns': [
                            { data: 'id' },
                            { data: 'id_inventario' },
                            { data: 'numero_conta' },
                            { data: 'magazzino' },
                            { data: 'id_fase_tipo_prodotto_finito' },
                            { data: 'fornitori_conto_lavoro' },
                            { data: 'username' },
                            { data: 'codice_materiale' },
                            { data: 'quantita' },
                            { data: 'unita_misura' },
                            { data: 'created_at' },
                        ]
                });



            });
            </script>

<?= $this->endSection() ?>
Datatable is showed properly but the search don't work with culumn where i use entity as td's values (3 culumns , 2 foreign key and created_at) :
Code:
                "id_inventario"=>$record->inventario()->nome,
                "id_fase_tipo_prodotto_finito"=>$record->tipo_prodotto_finito()->nome.' '.$record->fase_tipo_prodotto_finito()->numero,
                "created_at"=>$record->created_at,

$record->created_at  is dysplayed as [Object Object] . 
There is a way to search with entity's values instead of db's values ?
Reply




Theme © iAndrew 2016 - Forum software by © MyBB