皆さんこんにちは、
私は"yajra/laravel-datatables-oracle": "^6.3"
とlaravel5.2を使用しています。
データテーブルの一覧表示はすべて問題ありませんが、検索を開始するとエラーが発生します
SQLSTATE[42000]: Syntax error or access violation: 1583 Incorrect parameters in the call to native function 'LOWER' ...
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);
}
$('#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);
},
});
私を助けてください。
ありがとう!
@ Seven9は、最新の安定バージョンv6.22.5
更新しようとしましたか?
こんにちは@yajra 、
私はすでに更新して試しました。その問題は、次のようなテーブルエイリアスを使用すると発生します。
DB::table('items as it')
そしてlaravelクエリビルダーで多くのタルブに参加してください。
ありがとう..
@ Seven9 、同じ問題が発生しましたが、最終的には解決しました。 修正は私のJSにありました。
列のプロパティがエイリアスと実際の列と一致することを確認しました。
あなたの例を使用して:
data: 'name', name: 'name'
data: 'category', name: 'category'
データ値:_alias_
名前-値:_実際の列_
試す:
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'}
]
});
すべてが完全に機能しますが、検索中にこのエラーが発生します_SearchErrorネイティブ関数 'LOWER'_の呼び出しでパラメーターが正しくありません
何が足りないのですか? @yajra @jedknyt ?
@siddharthghediaは結合を使用しているため、各列にもテーブル名を含め、 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_u
とapp_u
がすでにエイリアスです。 どうすれば解決できますか? 前もって感謝します。
こんにちは@siddharthghedia 、私は同じ問題を抱えています、あなたは何か解決策がありますか?
前もって感謝します。
それは私を大いに助けました、私は問題を解決しました...解決策を共有してくれてありがとう
@siddharthghediaは結合を使用しているため、各列にもテーブル名を含め、
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は結合を使用しているため、各列にもテーブル名を含め、
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'} ]
わたしにはできる。 ありがとうございます
最も参考になるコメント
@ Seven9 、同じ問題が発生しましたが、最終的には解決しました。 修正は私のJSにありました。
列のプロパティがエイリアスと実際の列と一致することを確認しました。
あなたの例を使用して:
data: 'name', name: 'name'
data: 'category', name: 'category'
データ値:_alias_
名前-値:_実際の列_
試す:
data: 'name', name: 'it.name'
data: 'category', name: 'c.name'