537 ๊ฐ ๋ ์ฝ๋๋ฅผ๋ก๋ ํ ๋ ์ฑ๋ฅ ์ ํ
ํ์ด์ง๋ก๋์ : 4.34 ์ด
ํ์ด์ง ๋งค๊น : 3.98 ์ด
"pageLength": 10
๋ฐ์ดํฐ ํ
์ด๋ธ์ ํ์ด์ง ๋งค๊น์ ์ฌ์ฉํ ๋๋ณด ๋ค ์ฟผ๋ฆฌ์์ 10๊ณผ ๊ฐ์ด ํ์ด์ง ๋น ํ์ ์ ํ ํ ์์๋ ๊ฐ๋ฅ์ฑ์ด ์์ต๋๊น? ๋ค๋ฅธ 10 ๊ฐ๋ฅผ๋ก๋ ํ ๊ฒ์
๋๋ค ...
์ถ์ : ํ์ด์ง ๋งค๊น์ด ๋นํ์ฑํ๋์ด ์์ด๋ ๋ก๋ฉ ์๊ฐ์ ์ฌ์ ํ โโ4.34 ์ด
Controller
public function membresData()
{
$membres = Membre::
join('equipes', 'equipes.id', '=', 'membres.equipe_id')
->join('laboratoires', 'laboratoires.id', '=', 'equipes.laboratoire_id')
->join('etablissements as e1', 'e1.id', '=', 'laboratoires.etablissement_id')
->leftjoin('etablissements as e2', 'e2.id', '=', 'membres.etablissement_id')
->leftjoin('profils', 'profils.id', '=', 'membres.profil_id')
->leftjoin('typemembres', 'typemembres.id', '=', 'membres.typemembre_id')
->select ('membres.id','equipes.axe_recherche','laboratoires.libelle','laboratoires.periode_accreditation_dd','laboratoires.periode_accreditation_df','e1.abbreviation as etablab','membres.nom', 'membres.prenom', 'membres.cv', 'membres.sujet', 'e2.abbreviation as etabmem', 'profils.typeprofil', 'membres.cin', 'membres.email','typemembres.typemembre')
->orderBy('axe_recherche', 'asc')
->get();
if(request()->ajax()){
return Datatables::of($membres)
->addColumn('name',
'{{$nom}} {{$prenom}}'
)
->addColumn('cv', function ($membre) {
if ($membre->cv != null){
$url=url("uploadedCvMembre/$membre->etablab/$membre->cv");
return '<div data-provide="photoswipe">
<img class="avatar avatar-sm cursor-pointer" src="'.$url.'" alt="Curriculum vitae de : '.$membre->prenom.' '.$membre->nom.'" data-provide="tooltip" data-original-title="Curriculum vitae" data-tooltip-color="primary" aria-describedby="tooltip946475">
</div> ';
}
})
->addColumn('laboratoire',
'ยซ {{$etablab}} ยป {{ $libelle }} <small>{{ \Carbon\Carbon::parse($periode_accreditation_dd)->format("Y") }} - {{ \Carbon\Carbon::parse($periode_accreditation_df)->format("Y") }}</small>'
)
->addColumn('action',
'<nav class="nav gap-1 fs-16">
<a class="nav-link disabled hover-warning" data-provide="tooltip" data-tooltip-color="warning" data-original-title="Modifier" href="{{route("membre.edit",$id)}}"><i class="ti-pencil"></i></a>
<form method="POST" action="{{ action("MembreController@destroy", ["id" => $id]) }}" class="delete_form">
<strong i="16">@csrf</strong>
@method("DELETE")
<a class="nav-link disabled hover-danger delete-btn" data-provide="tooltip" data-tooltip-color="danger" data-original-title="Supprimer" href="#"><i class="ti-trash"></i></a>
</form>
</nav>'
)
->rawColumns(['cv','laboratoire','action'])
->make(true);
}else{
abort('404');
}
Js
app.ready(function(){
$("#dtable").dataTable().fnDestroy();
$('#dtable').DataTable({
"columnDefs": [
{ "visible": false, "targets": [0,1] },
{ "orderable": false, "targets": [-1] }
],
"order": [[ 1, 'asc' ]],
processing: true,
serverSide: true,
ajax: '{!! route('membres') !!}',
deferRender: true,
columns: [
{ data: 'laboratoire', name: 'laboratoire' },
{ data: 'axe_recherche', name: 'axe_recherche' },
{ data: 'name', name: 'name' },
{ data: 'cv', name: 'cv', orderable: false, searchable: false },
{ data: 'sujet', name: 'sujet' },
{ data: 'etabmem', name: 'etabmem', orderable: false, searchable: false },
{ data: 'typeprofil', name: 'typeprofil' },
{ data: 'cin', name: 'cin' },
{ data: 'email', name: 'email' },
{ data: 'typemembre', name: 'typemembre' },
{ data: 'action', name: 'action', orderable: false, searchable: false}
],
"drawCallback": function ( settings ) {
$('[data-provide~="tooltip"]').each(function(){var b="";$(this).hasDataAttr("tooltip-color")&&(b=" tooltip-"+$(this).data("tooltip-color")),$(this).tooltip({container:"body",trigger:"hover",template:'<div class="tooltip'+b+'" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>'})});
var api = this.api();
var rows = api.rows( {page:'current'} ).nodes();
var last=null;
api.column(0, {page:'current'} ).data().each( function ( group, i ) {
if ( last !== group ) {
$(rows).eq( i ).before(
'<tr class="group bl-3 br-3 border-primary bg-light text-center" ><td class="fw-500" colspan="9">'+group+'</td></tr>'
);
last = group;
}
} );
api.column(1, {page:'current'} ).data().each( function ( group, i ) {
if ( last !== group ) {
$(rows).eq( i ).before(
'<tr class="group bl-3 border-warning bg-light" ><td class="fw-500" colspan="9">Equipe : '+group+'</td></tr>'
);
last = group;
}
} );
}
});
});
๋ฐ์ดํฐ ์์ค์์ get()
๋ฅผ ์ ๊ฑฐํ์ฌ ์ปฌ๋ ์
๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
>orderBy('axe_recherche', 'asc')
->get(); // remove this line.
@yajra ๋ฌธ์ ํด๊ฒฐ ๊ฐ์ฌํฉ๋๋ค
์๋ ํ์ธ์ ์ ์ฟผ๋ฆฌ๊ฐ ์์ง๋ณด๋ค ํจ์ฌ ๋น ๋ฅธ์ง ์ค๋ช ํด ์ฃผ์๊ฒ ์ต๋๊น?
๋ชจ๋ ๊ฒฐ๊ณผ์ ํ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋ ํจ์จ์ ์ธ ๊ธฐ๋ฅ์ ์ํํ๋ ค๊ณ ํ๋ ๋์ ์ฟผ๋ฆฌ์ ๋ํ ๋๋จธ์ง ๊ธฐ๋ฅ์ ์ํํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
์๋ต ์๊ฐ์ด ๋๋ฆฝ๋๋ค
ํ์ด์ง๋ก๋ : 13.40 ์ด
ํ์ด์ง ๋งค๊น : 9 ์ด
์ฝ๋ ์ค ๋ํซ
๊ณต์ฉ ํจ์ lending_return_log_server_side ()
{
$ alluser = ์ธ์
:: get ( 'alluser');
$ reference = $ this-> database-> getReference ( 'lending_return_log')-> getSnapshot ()-> getValue ();
$ reference = array_reverse ($ reference);
$ data = [];
$ ์ด๋ฆ = '';
$ email = '';
foreach ($ lending_return_log๋ก $ reference) {
// dd ($ lending_return_log [ 'uid']);
foreach ($ alluser as $ key => $ value) {
if ($ key == $ lending_return_log [ 'uid']) {
$ name = $ value [ '์ฌ์ฉ์ ์ด๋ฆ'];
$ email = $ value [ 'email'];
}
}
$ nestedData [ 'user_info'] = " ". "
". $ email."
". $ lending_return_log [ 'lending_log_id'];
$ nestedData [ 'time_and_trx_id'] = \ Carbon \ Carbon :: parse ($ lending_return_log [ 'time'])-> format ( 'F j, Y, g : i a'). "
". $ lending_return_log [ 'trxid']." ";
$ nestedData [ 'back_amount'] = " ".number_format ($ lending_return_log [ 'amount_back_nob'], 8). "NOB ";
$ nestedData [ 'closing_balance'] = " ".number_format ($ lending_return_log [ 'final_balance_nob'], 8). "NOB ";
$ nestedData [ 'nob_price'] = $ lending_return_log [ 'nob_price_at']. "$";
$ nestedData [ 'curr_return'] = " ".number_format ($ lending_return_log [ 'return_of_cur'], 8). "". $ lending_return_log [ 'cur_type']. " ";
$data[] = $nestedData;
}
// $reference = collect($reference);
$finalData = Datatables::of($data)->rawColumns(['user_info', 'time_and_trx_id', 'back_amount', 'closing_balance', 'nob_price', 'curr_return'])->make(true);
return $finalData;
}
(ํจ์() {
$ ( '# table'). DataTable ({
์ฒ๋ฆฌ : ์ฌ์ค,
serverSide : true,
์์ฝ์ค : '{{url ('project-log-serverside ')}}',
์ด : [
{๋ฐ์ดํฐ : 'user_info', ์ด๋ฆ : 'user_info'},
{๋ฐ์ดํฐ : 'time_and_trx_id', ์ด๋ฆ : 'time_and_trx_id'},
{๋ฐ์ดํฐ : 'back_amount', ์ด๋ฆ : 'back_amount'},
{data : 'closing_balance', ์ด๋ฆ : 'closing_balance'},
{๋ฐ์ดํฐ : 'nob_price', ์ด๋ฆ : 'nob_price'},
{๋ฐ์ดํฐ : 'curr_return', ์ด๋ฆ : 'curr_return'},
]
});
});
ํจํค์ง ๋ฒ์
๋ผ ๋ผ๋ฒจ 5.7
PHP : 7.2
๋ผ ๋ผ๋ฒจ ๋ฐ์ดํฐ ํ
์ด๋ธ : 8.13.7
๋ฐ์ดํฐ๋ฒ ์ด์ค : NoSql DB (Firebase)
์ด๊ฒ ๋ญ๊ฐ ์๋ชป ๋๋์ง ์ ๋ฐ?
๊ฐ์ฌ
์ธ๋ฑ์ฑ ํ์ธ
์ ์ด ์ฅ์น:
$ trade1 = Tradecum3 :: where ( 'CODE', Auth :: user ()-> ucc_code)-> where ( 'SCPOPT', '! =', 'EX')-> select ( 'UNIQUEID', 'CODE' , 'TRDATE', 'BS', 'SCPOPT as INSTTYPE', 'SCPCODE', 'SCPNAME', 'DUEDATE', 'STRIKERATE', 'MKTRATE', 'QTY', DB :: raw ( 'ABS (MKTRATE * QTY ) MKTTOTAL๋ก '));
$trade2 = Tradecum2::where('CODE', Auth::user()->ucc_code)->where('SCPOPT', '!=', 'EX')->select('UNIQUEID', 'CODE', 'TRDATE', 'BS', 'SCPOPT as INSTTYPE', 'SCPCODE', 'SCPNAME', 'DUEDATE', 'STRIKERATE', 'MKTRATE', 'QTY', DB::raw('ABS(MKTRATE * QTY) as MKTTOTAL'));
$trade = Tradecum1::where('CODE', Auth::user()->ucc_code)->where('SCPOPT', '=', 'EQ')->select('UNIQUEID', 'CODE', 'TRDATE', 'BS', 'SCPOPT as INSTTYPE', 'SCPCODE', 'SCPNAME', 'DUEDATE', 'STRIKERATE', 'MKTRATE', 'QTY', DB::raw('ABS(MKTRATE * QTY) as MKTTOTAL'))->union($trade1)->union($trade2);
return DataTables::of($trade)
->addColumn('INSTNAME', function ($trade) {
return $trade->SCPNAME."(". $trade->SCPCODE.")";
})
->editColumn('INSTTYPE',function($trade){
if($trade->INSTTYPE == "CE")
return "Call Opt";
else if ($trade->INSTTYPE == "PE")
return "Put Opt";
else if ($trade->INSTTYPE == "CF")
return "Futures(EQ)";
else if ($trade->INSTTYPE == "IF")
return "Futures(INDEX)";
else
return $trade->INSTTYPE;
})
->rawColumns(['INSTNAME'])
->make(true);
์ ๋ง:
$ ( '# recentTradeTableAll'). DataTable ({
์ฒ๋ฆฌ : ์ฌ์ค,
serverSide : true,
ํ๊ดด : ์ฐธ,
ajax : {
URL : "{{route ( 'datatable.trades')}}",
์ ํ : 'POST',
ํค๋ : {
'X-CSRF-TOKEN': $ ( 'meta [name = "csrf-token"]'). attr ( 'content')
},
๋ฐ์ดํฐ : function (d) {
d.instrumentType = $("input[name='instrumentType']:checked").val();
d.transaction_type = $("input[name='transaction_type']:checked").val();
}
},
columns: [{
data: 'TRDATE',
name: 'TRDATE'
},
{
data: 'BS',
name: 'BS'
},
{
data: 'INSTNAME',
name: 'INSTNAME'
},
{
data: 'STRIKERATE',
name: 'STRIKERATE'
},
{
data: 'INSTTYPE',
name: 'INSTTYPE'
},
{
data: 'DUEDATE',
name: 'DUEDATE'
},
{
data: 'MKTRATE',
name: 'MKTRATE'
},
{
data: 'QTY',
name: 'QTY'
},
{
data: 'MKTTOTAL',
name: 'MKTTOTAL'
}
]
});
get ()์ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ๋ก๋ํ๊ณ pageLength๊ฐ ์๋ํ์ง ์์ต๋๋ค. ์๋ ๋ชจ๋ ๋ ์ฝ๋๋ฅผ๋ก๋ํฉ๋๋ค.
๋ฐ์ดํฐ ์์ค์์
get()
๋ฅผ ์ ๊ฑฐํ์ฌ ์ปฌ๋ ์ ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.>orderBy('axe_recherche', 'asc') ->get(); // remove this line.
์ด๋ก ์ธํด ๋ด ์ฟผ๋ฆฌ๊ฐ 20 ์ด์์ 2 ๋ฏธ๋ง์ผ๋ก ๋์ด๋ฌ์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ฐ์ดํฐ ์์ค์์
get()
๋ฅผ ์ ๊ฑฐํ์ฌ ์ปฌ๋ ์ ๋์ ์ฟผ๋ฆฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.