Laravel-datatables: Error de búsqueda Parámetros incorrectos en la llamada a la función nativa 'LOWER'

Creado en 21 dic. 2016  ·  13Comentarios  ·  Fuente: yajra/laravel-datatables

Hola a todos,
Yo uso "yajra/laravel-datatables-oracle": "^6.3" y laravel 5.2.

Todo está bien con la lista de tablas de datos, pero cuando comienzo a buscar aparece el error

SQLSTATE[42000]: Syntax error or access violation: 1583 Incorrect parameters in the call to native function 'LOWER' ...

Aquí está mi código php

public function index(Request $request){

         $items = DB::table('items as it')->select('it.*','c.name as category') 
                                             ->join('category as c', 'it.category_id', '=', 'c.id');
        $datatables = Datatables::of($items) 
                        ->addColumn('no', function ($items) { return ''; }));

        if ($keyword = $request->get('search')['value']) {
            $datatables->filterColumn('name', 'whereRaw', "items.name like ? ", ["%$keyword%"]);
            $datatables->filterColumn('category', 'whereRaw', "category.name like ? ", ["%$keyword%"]);
        }
        return $datatables->make(true);
}

Aquí está mi javascript

$('#items_table').DataTable({
    processing: true,
    serverSide: true,
    iDisplayLength: 25,
    'responsive': true,
    'language' : {
      "sSearchPlaceholder": "Search..",
      "lengthMenu": "_MENU_",
      "search": "_INPUT_",
      "paginate": {
        "previous"  : '<i class="icon md-chevron-left"></i>',
        "next"      : '<i class="icon md-chevron-right"></i>'
      }
    }, 
    order: [[ 1, "asc" ]],
    ajax: {
      url  :  'items/index',
      type : "POST",
      data : function (d) {}
    },
    columns: [
      { data: 'no', orderable: false, bSearchable: false },
      { data: 'name', name: 'name' },
      { data: 'category', name: 'category' },
    ],
    "fnRowCallback" : function(nRow, aData, iDisplayIndex){
        // For auto numbering at 'No' column
        var start = tbl.page.info().start;
        $('td:eq(0)',nRow).html(start + iDisplayIndex + 1);
    },
  });

Por favor, ayúdame.
¡Gracias!

need feedback

Comentario más útil

@ seven9 , acabo de tener el mismo problema, pero finalmente lo resolví. La solución estaba en mi JS.
Me aseguré de que las propiedades de la columna coincidan con el alias y las columnas reales.

Usando tu ejemplo:
data: 'name', name: 'name'
data: 'category', name: 'category'

valor-datos : _alias_
nombre-valor : _columna actual_

tratar:
data: 'name', name: 'it.name'
data: 'category', name: 'c.name'

Todos 13 comentarios

@ seven9 ¿ ha intentado actualizar a la última versión estable v6.22.5 ?

Hola @yajra ,

Ya lo actualicé y lo probé Ese problema ocurre cuando uso un alias de tabla como
DB::table('items as it') y únete a muchos talbes con el generador de consultas laravel.

Gracias..

@ seven9 , acabo de tener el mismo problema, pero finalmente lo resolví. La solución estaba en mi JS.
Me aseguré de que las propiedades de la columna coincidan con el alias y las columnas reales.

Usando tu ejemplo:
data: 'name', name: 'name'
data: 'category', name: 'category'

valor-datos : _alias_
nombre-valor : _columna actual_

tratar:
data: 'name', name: 'it.name'
data: 'category', name: 'c.name'

Gracias @jedknyt y buena solución.

@jedknyt me has ahorrado mucho tiempo hermano

@jedknyt gracias por compartir la solución. 👍

Consulta

$sales = \DB::table('driver_ride_transactions as drt')
            ->join('bookings', 'bookings.id', '=', 'drt.booking_id')
            ->join('businesses', 'businesses.id', '=', 'bookings.business_id')
            ->leftJoin('users as driver_u', 'drt.user_id', '=', 'driver_u.id')
            ->leftJoin('users as app_u', 'bookings.user_id', '=', 'app_u.id')
            ->select('drt.id', 'drt.status', 'driver_u.first_name as driver_name', 'app_u.first_name as app_user_name', 'businesses.name as destination', 'drt.created_at');

Código Javascript

$('#sales-table').DataTable({
            processing: true,
            serverSide: true,
            order: [ [4, 'desc'] ],
            ajax: '{{ route('admin:fetch:ride:transactions') }}',
            columns: [
                {data: 'id', name: 'drt.id'},
                {data: 'destination', name: 'destination'},
                {data: 'driver_name', name: 'driver_name'},
                {data: 'app_user_name', name: 'app_user_name'},
                {data: 'created_at', name: 'drt.created_at'},
                {data: 'status', name: 'drt.status'}
            ]
        });

Todo funciona perfectamente, pero sigue apareciendo este error al buscar _Search Error Parámetros incorrectos en la llamada a la función nativa 'LOWER'_
screen shot 2017-11-24 at 12 51 06 pm

¿Qué me estoy perdiendo? @yajra @jedknyt ?

@siddharthghedia ya que está usando join, creo que también debe incluir el nombre de la tabla en cada columna y evitar usar el alias en los valores name . Utilice el valor real de la columna.

columns: [
                {data: 'id', name: 'drt.id'},
                {data: 'destination', name: 'drt.destination'},
                {data: 'driver_name', name: 'driver_u.first_name'},
                {data: 'app_user_name', name: 'app_u.first_name'},
                {data: 'created_at', name: 'drt.created_at'},
                {data: 'status', name: 'drt.status'}
            ]

@yajra Muchas gracias por responder, intenté el mismo código que escribiste, pero aún así me dio el mismo error y me pediste que no usaras alias en name ¿verdad? Pero aquí driver_u y app_u son los alias. ¿Cómo podría solucionarlo? Gracias de antemano.

Hola @siddharthghedia , tengo el mismo problema, ¿tienes alguna solución?
Gracias de antemano.

Me sirvió de mucho, resolví el problema... gracias por compartir la solución

@siddharthghedia ya que está usando join, creo que también debe incluir el nombre de la tabla en cada columna y evitar usar el alias en los valores name . Utilice el valor real de la columna.

columns: [
                {data: 'id', name: 'drt.id'},
                {data: 'destination', name: 'drt.destination'},
                {data: 'driver_name', name: 'driver_u.first_name'},
                {data: 'app_user_name', name: 'app_u.first_name'},
                {data: 'created_at', name: 'drt.created_at'},
                {data: 'status', name: 'drt.status'}
            ]

Esto funciona para mi. Muchas gracias

@siddharthghedia ya que está usando join, creo que también debe incluir el nombre de la tabla en cada columna y evitar usar el alias en los valores name . Utilice el valor real de la columna.

columns: [
                {data: 'id', name: 'drt.id'},
                {data: 'destination', name: 'drt.destination'},
                {data: 'driver_name', name: 'driver_u.first_name'},
                {data: 'app_user_name', name: 'app_u.first_name'},
                {data: 'created_at', name: 'drt.created_at'},
                {data: 'status', name: 'drt.status'}
            ]

Esto funciona para mi. Muchas gracias

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

t0n1zz picture t0n1zz  ·  3Comentarios

sangnguyenplus picture sangnguyenplus  ·  3Comentarios

jgatringer picture jgatringer  ·  3Comentarios

FilipeBorges1993 picture FilipeBorges1993  ·  3Comentarios

hari-web picture hari-web  ·  3Comentarios