Laravel-datatables: 搜索错误 调用本机函数“LOWER”时参数不正确

创建于 2016-12-21  ·  13评论  ·  资料来源: yajra/laravel-datatables

嗨,大家好,
我使用"yajra/laravel-datatables-oracle": "^6.3"和 Laravel 5.2。

列出数据表一切正常,但是当我开始搜索时出现错误

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

这是我的 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);
}

这是我的 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);
    },
  });

请帮我。
谢谢!

need feedback

最有用的评论

@seven9 ,我刚遇到同样的问题,但最终解决了。 修复在我的 JS 中。
我确保列属性与别名和实际列匹配。

使用您的示例:
data: 'name', name: 'name'
data: 'category', name: 'category'

数据值:_别名_
名称-值:_实际列_

尝试:
data: 'name', name: 'it.name'
data: 'category', name: 'c.name'

所有13条评论

@seven9您是否尝试更新到最新的稳定版本v6.22.5

@yajra

我已经更新并尝试过了。当我使用表别名时会发生这个问题
DB::table('items as it')并使用 Laravel 查询构建器加入许多 talbes。

谢谢..

@seven9 ,我刚遇到同样的问题,但最终解决了。 修复在我的 JS 中。
我确保列属性与别名和实际列匹配。

使用您的示例:
data: 'name', name: 'name'
data: 'category', name: 'category'

数据值:_别名_
名称-值:_实际列_

尝试:
data: 'name', name: 'it.name'
data: 'category', name: 'c.name'

谢谢@jedknyt和很好的修复。

@jedknyt你为我节省了很多时间兄弟

@jedknyt感谢分享解决方案。 👍

询问

$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');

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'}
            ]
        });

一切正常,但在搜索 _Search 错误时仍然出现此错误 调用本机函数 'LOWER' 时参数不正确_
screen shot 2017-11-24 at 12 51 06 pm

我错过了什么? @yajra @jedknyt

@siddharthghedia由于您正在使用 join,我认为您也应该在每列中包含表名,并避免在name值上使用别名。 使用实际的列值。

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 非常感谢您的回复,我尝试了您编写的相同代码,但仍然给了我同样的错误,并且您要求不要在name上使用别名,对吗? 但是这里driver_uapp_u已经是别名了。 我怎么能解决呢? 先感谢您。

你好@siddharthghedia ,我有同样的问题,你有什么解决办法吗?
先感谢您。

它对我帮助很大,我解决了问题......感谢分享解决方案

@siddharthghedia由于您正在使用 join,我认为您也应该在每列中包含表名,并避免在name值上使用别名。 使用实际的列值。

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'}
            ]

这个对我有用。 非常感谢

@siddharthghedia由于您正在使用 join,我认为您也应该在每列中包含表名,并避免在name值上使用别名。 使用实际的列值。

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'}
            ]

这个对我有用。 非常感谢

此页面是否有帮助?
0 / 5 - 0 等级