filtercolumn ()์ ์ฌ์ฉํ์ฌ ์ด๋ฆ๊ณผ ๊ฐ์ ์ฌ๋ฌ ์ด์ ๊ฒ์ ํ ์ ์๋๋กํ์ต๋๋ค (first_name ๋ฐ last_name์์ ๊ฒฐํฉ)
๋ฐ๋ชจ๋ฅผ ์ฝ์์ง๋ง ์ฟผ๋ฆฌ๊ฐ ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ํผ๋ ์ค๋ฝ์ต๋๋ค.
$(function () {
$("#datatable").DataTable({
processing: true,
serverSide: true,
"order": [[ 1, "asc" ]],
ajax: "{!! route('admin.customers.getdata','Umum') !!}",
columns: [
{ data: null, bSortable: false, className: "text-center" },
{ data: "id" },
{ data: "name", name: "name" },
{ data: "type" },
{ data: "email" },
{ data: "location" },
{ data: "active", bSortable: false, className: "text-center" },
{ data: "free_ongkir", bSortable: false, className: "text-center" },
{ data: "action", bSortable: false, className: "text-center" }
],
fnRowCallback: function(nRow, aData, iDisplayIndex){
$("td:first", nRow).html(iDisplayIndex +1);
return nRow;
}
});
๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ ๋ด ์ปจํธ๋กค๋ฌ์ ์ฝ๋
public function getdata($type)
{
$users = User::where(['type'=>$type])->whereHas('roles', function ($query) {
$query->where('slug', '=', 'user');
})->get();
foreach ($users as $key => $value) {
if($value->id == Sentinel::getUser()->id) $value->disabled = "disabled";
else$value->disabled = "";
}
return Datatables::of($users)
->editColumn('name', '
<a href="{{ route(\'admin.customers.show\', $id) }}">{!! $first_name." ".$last_name !!}</a>
')
->filterColumn('name', function($query, $keyword) {
$sql = "CONCAT(users.first_name,'-',users.last_name) like ?";
$query->whereRaw($sql, ["%{$keyword}%"]);
})
->editColumn('type', function($users) {
if($users->hasAccess('superadmin')) return 'Super Admin';
else return "Komoditi $users->type";
})
->editColumn('active', function($users) {
if(!$users->is_approved) {
return '<span class="has-error form-group"><label><i class="fa fa-times-circle-o"></i> Belum di approve</label></span>';
} else if(Activation::completed($users)) {
return '<span class="has-success form-group"><label><i class="fa fa-check"></i> Aktif</label></span>';
} else {
return '<span class="has-error form-group"><label><i class="fa fa-times-circle-o"></i> Belum Aktivasi</label></span>';
}
})
->editColumn('free_ongkir', function($users) {
if ($users->free_ongkir == 1) {
return '<span class="has-success form-group"><label><i class="fa fa-check"></i></label></span>';
}else {
return '<span class="has-error form-group"><label><i class="fa fa-times-circle-o"></i></label></span>';
}
})
->editColumn('location', function($users){
if(empty($users->city->name)) return 'None';
else return $users->city->name;
})
->addColumn('action', '@if(Sentinel::getUser()->hasAccess(["customers.edit"]))<button class="btn btn-primary" type="button" onClick="location.href=\'{{ route(\'admin.customers.edit\', $id) }}\'"><i class="fa fa-edit"></i></button>
<strong i="13">@endif</strong>
{!! Form::open([
\'method\'=>\'DELETE\',
\'route\' => [\'admin.customers.destroy\', $id],
\'style\' => \'display:inline\'
]) !!}
@if(Sentinel::getUser()->hasAccess(["customers.destroy"]))
{!! Form::button(\'<i class="fa fa-trash"></i>\', [\'class\' => \'btn btn-danger btn-md\',\'type\'=>\'submit\',\'onclick\'=>\'return confirm("Are you sure want to delete?")\', $disabled]) !!}
<strong i="14">@endif</strong>
{!! Form::close() !!}
')
->make(true);
}
@faisalhilmi ๋ https://github.com/yajra/laravel-datatables/issues/1173์์ ์ ๊ณต๋๋ ์๋ฃจ์ ์
๋๋ ์ฐธ์กฐ๋ฅผ ๋ณธ ๋ค์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ๋ ค๊ณ ํฉ๋๋ค.
{ data: "name", name: "name" },
{ data: "first_name", name: "first_name", visible: false },
{ data: "last_name", name: "last_name", visible: false },
์ปจํธ๋กค๋ฌ์์ :
->editColumn('name', '
<a href="{{ route(\'admin.customers.show\', $id) }}">{!! $first_name." ".$last_name !!}</a>
')
->filterColumn('name', function($query, $keyword) {
$query->orWhere('first_name', 'like', '%'. $keyword . '%');
$query->orWhere('last_name', 'like', '%'. $keyword . '%');
})
๊ทธ๋ฌ๋ ๊ฒ์์ ์ด๋ฆ ๋๋ ์ฑ๋ง ์ฌ์ฉํ ์ ์์ผ๋ฉฐ ๋ ๋ค ์ฌ์ฉํ ์๋ ์์ต๋๋ค.
๊ฐ๋ฅํ ๊น์?
์, ์ฌ๊ธฐ์ ๋ค์ค ์ฉ์ด ๊ฒ์ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จํ์ฌ ๋ฒ๊ทธ๊ฐ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ ์ฒด ์ด๋ฆ ๊ณต๊ฐ์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ๋ถํ์ฌ ๊ฒ์ํ๊ณ ์์ต๋๊น? filterColumn์ ์ ๋ฌ ๋ ํค์๋๊ฐ ์ด์ ๋ ๋ถ๋ถ (์ด๋ฆ๊ณผ ์ฑ)์ผ๋ก ๋ถ๋ฆฌ๋์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์๋ํด ์ฃผ์๊ฒ ์ต๋๊น?
->filterColumn('name', function($query, $keyword) {
$sql = "CONCAT(users.first_name,'-',users.last_name) like ?";
$keyword = request('search.value');
$query->whereRaw($sql, ["%{$keyword}%"]);
})
์, ์ ์ฒด ์ด๋ฆ์ ๊ฒ์ํ๊ณ ์ถ์ต๋๋ค :)
๋๋ ์ด๋ ๊ฒ ์๋ํ๋ค
$users = User::where(['type'=>$type])->whereHas('roles', function ($query) {
$query->where('slug', '=', 'user');
})->get();
foreach ($users as $key => $value) {
if($value->id == Sentinel::getUser()->id) $value->disabled = "disabled";
else$value->disabled = "";
}
return Datatables::of($users)
->editColumn('name', '
<a href="{{ route(\'admin.customers.show\', $id) }}">{!! $first_name." ".$last_name !!}</a>
')
->filterColumn('name', function($query, $keyword) {
$sql = "CONCAT(users.first_name,'-',users.last_name) like ?";
$keyword = request('search.value');
$query->whereRaw($sql, ["%{$keyword}%"]);
})
ํ์ง๋ง ์ฌ์ ํ ์๋ํ์ง ์์ต๋๋ค. ์ฌ์ง์ด filtercolumn์ $ query๋ฅผ $ users๋ก ๋ณ๊ฒฝํ๋ ค๊ณ ํฉ๋๋ค.
$ users ์ฟผ๋ฆฌ์ ๋ฌธ์ ๊ฐ ์์ต๋๊น?
ajax ์๋ต์ ์ค๋ฅ๊ฐ ๋ฐํ๋ฉ๋๊น?
์ค๋ฅ ์์, "๊ณ ๊ฐ umum"์ ๊ฒ์ ํ ๋ "์ผ์นํ๋ ๋ ์ฝ๋๋ฅผ ์ฐพ์ ์ ์์"
"customer"๋ users ํ
์ด๋ธ์์ first_name์
๋๋ค.
"umum"์ users ํ
์ด๋ธ์ last_name์
๋๋ค.
ajax ์์ฒญ์ ๊ฒ์ฌํ๊ณ ์์ฑ ๋ SQL์ ๋ถ์ฌ ๋ฃ์ ์ ์์ต๋๊น? ๋๋ ๋น์ ์ SQL์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์๋์ผ๋ก ์คํ ํด๋ณด์ญ์์ค.
๋ฐฉ๊ธ v6.x๋ฅผ ์ฌ์ฉํ๊ณ ์์ผ๋ฉฐ ์ฌ๋ฌ ์ฉ์ด ๊ฒ์์ด ์ ์ฉ๋์ง ์๋๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ฃ์กํฉ๋๋ค!
"yajra / laravel-datatables-oracle": "~ 6.0", ๊ทธ๊ฒ ๋ฌธ์ ์ ๋๊น?
์๋์, ๋ฌธ์ ๊ฐ ์๋๋๋ค. ์๋ชป๋ ๊ธฐ๋ฅ์ ์ฐธ์กฐํ ๊ฒ๋ฟ์ ๋๋ค. ์ฌ๊ธฐ์ ์ค๋ฅ๊ฐ ์์ฑ ๋ SQL์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ฆ๊ณผ์ฑ์ concat์ ์ฌ์ฉํ์ง๋ง ๊ณต๋ฐฑ์ด ์๋ -
๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถํฉ๋๋ค. ๊ทธ๊ฒ ๋ฌธ์ ์ ์์ธ์ผ๊น์?
์์ง ์ ์ฒด ์ด๋ฆ์ ์ฐพ์ ์ ์์ต๋๋ค :(
์์ฑ ๋ ์ฟผ๋ฆฌ๋ฅผ ๋๋ฒ๊ทธํด์ผํฉ๋๋ค. ํฌ๋กฌ ๊ฐ๋ฐ ๋๊ตฌ ๋๋ ๋ฐฉํ๋ฒ์ ์ฌ์ฉํ๊ณ ์์ฑ ๋ SQL์ ๊ฒ์ฌํฉ๋๋ค.
์ฌ๊ธฐ์ concat์ ์ถ๊ฐํด์ผํฉ๋๊น?
$users = User::where(['type'=>$type])->whereHas('roles', function ($query) {
$query->where('slug', '=', 'user');
})->get();
์, ->get();
๋ฅผ ์ ๊ฑฐํ๊ณ ํจํค์ง๊ฐ SQL ์์ค์์ ํ์ด์ง ๋งค๊น์ ์ํํ๋๋กํด์ผํฉ๋๋ค.
๋๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ํ์ ์ด๊ธฐ ๋๋ฌธ์ ํ ์ ์์ต๋๋ค :(
->get()
๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ์
๋ณ ๋์ ์ปฌ๋ ์
์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฆฌ๊ณ filterColumn์ Collection
์ ์ ์ฉ๋์ง ์๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฟผ๋ฆฌ์์ get์ ์ ๊ฑฐํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์์ผํฉ๋๋ค. ์ด๊ฒ์ด ๊ฒ์์ด ์คํจํ๋ ๋ฌธ์ ์
๋๋ค.
๋ง์ง๋ง์ผ๋ก ํด๊ฒฐ๋๋ฉด ์ปจํธ๋กค๋ฌ์ ๋ฐ์ดํฐ ํ ์ด๋ธ์ ์ฟผ๋ฆฌ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํฉ๋๋ค.
$("#datatable").DataTable({
processing: true,
serverSide: true,
"order": [[ 1, "asc" ]],
ajax: "{!! route('admin.customers.getdata','Umum') !!}",
columns: [
{ data: null, bSortable: false, className: "text-center" },
{ data: "id" },
{ data: "name", name: "full_name" },
{ data: "type" },
{ data: "email" },
{ data: "location" },
{ data: "active", bSortable: false, className: "text-center" },
{ data: "free_ongkir", bSortable: false, className: "text-center" },
{ data: "action", bSortable: false, className: "text-center" }
],
fnRowCallback: function(nRow, aData, iDisplayIndex){
$("td:first", nRow).html(iDisplayIndex +1);
return nRow;
}
});
์ปจํธ๋กค๋ฌ :
{
$users = User::select('id','email','first_name','last_name','city_id', 'is_approved','type', DB::raw("CONCAT(first_name,' ',last_name) as full_name"))->where(['type'=>$type])->whereHas('roles', function ($query) {
$query->where('slug', '=', 'user');
})->get();
foreach ($users as $key => $value) {
if($value->id == Sentinel::getUser()->id) $value->disabled = "disabled";
else$value->disabled = "";
}
return Datatables::of($users)
->editColumn('name', '
<a href="{{ route(\'admin.customers.show\', $id) }}">{!! $first_name." ".$last_name !!}</a>
')
->editColumn('type', function($users) {
if($users->hasAccess('superadmin')) return 'Super Admin';
else return "Komoditi $users->type";
})
->editColumn('active', function($users) {
if(!$users->is_approved) {
return '<span class="has-error form-group"><label><i class="fa fa-times-circle-o"></i> Belum di approve</label></span>';
} else if(Activation::completed($users)) {
return '<span class="has-success form-group"><label><i class="fa fa-check"></i> Aktif</label></span>';
} else {
return '<span class="has-error form-group"><label><i class="fa fa-times-circle-o"></i> Belum Aktivasi</label></span>';
}
})
->editColumn('free_ongkir', function($users) {
if ($users->free_ongkir == 1) {
return '<span class="has-success form-group"><label><i class="fa fa-check"></i></label></span>';
}else {
return '<span class="has-error form-group"><label><i class="fa fa-times-circle-o"></i></label></span>';
}
})
->editColumn('location', function($users){
if(empty($users->city->name)) return 'None';
else return $users->city->name;
})
->addColumn('action', '@if(Sentinel::getUser()->hasAccess(["customers.edit"]))<button class="btn btn-primary" type="button" onClick="location.href=\'{{ route(\'admin.customers.edit\', $id) }}\'"><i class="fa fa-edit"></i></button>
<strong i="9">@endif</strong>
{!! Form::open([
\'method\'=>\'DELETE\',
\'route\' => [\'admin.customers.destroy\', $id],
\'style\' => \'display:inline\'
]) !!}
@if(Sentinel::getUser()->hasAccess(["customers.destroy"]))
{!! Form::button(\'<i class="fa fa-trash"></i>\', [\'class\' => \'btn btn-danger btn-md\',\'type\'=>\'submit\',\'onclick\'=>\'return confirm("Are you sure want to delete?")\', $disabled]) !!}
<strong i="10">@endif</strong>
{!! Form::close() !!}
')
->make(true);
}
๊ฐ์ฌํฉ๋๋ค :)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ง์ง๋ง์ผ๋ก ํด๊ฒฐ๋๋ฉด ์ปจํธ๋กค๋ฌ์ ๋ฐ์ดํฐ ํ ์ด๋ธ์ ์ฟผ๋ฆฌ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํฉ๋๋ค.
์ปจํธ๋กค๋ฌ :
๊ฐ์ฌํฉ๋๋ค :)