【问题标题】:Passing extra data from controller to the blade, along with datatables data将额外数据从控制器传递到刀片,以及数据表数据
【发布时间】:2021-11-18 21:06:33
【问题描述】:

我正在创建一个实时报告,数据表中有数据,我需要添加与实际数据表无关的其他数据。

控制器

$response = json_decode($output,true);

                if(!isset($response['error'])){
                    /**
                     * Key has access to AA permissions!
                    */
                    if($request->ajax()) {
                        $data = Attacks::groupBy('attacker_name')
                            ->selectRaw('count(*) as grand_total, attacker_name')
                            ->selectRaw('count(case result when ? then 1 else null end) as hosp',['Hospitalized'])
                            ->selectRaw('count(case result when ? then 1 else null end) as mug',['Mugged'])
                            ->selectRaw('count(case result when ? then 1 else null end) as attack',['Attacked'])
                            ->selectRaw('count(case result when ? then 1 else null end) as arrested',['Arrested'])
                            ->selectRaw('count(case result when ? then 1 else null end) as lost',['Lost'])
                            ->selectRaw('count(case result when ? then 1 else null end) as assist',['Assist'])
                            ->selectRaw('count(case when war > 1 then 1 else null end) as wall')
                            ->selectRaw('ROUND(SUM(respect_gain),2) as respect')
                            ->selectRaw('ROUND(SUM(respect_loss),2) as respectlost')
                            ->where('attacker_faction', 478)
                            ->where('timestamp_ended', '>', $response['chain']['start'])
                            ->orderBy('grand_total', 'DESC')
                            ->get();

                        //$data['chain'] = $response;

                        return datatables()
                        ->of($data)
                        ->addIndexColumn()
                        ->toJson();
                    }
                    
                    //return view('chain', ['chain' => $response['chain']]);
                }

路线

Route::get('chain/list', [AttacksController::class, 'chaining'])->middleware(['auth'])->name('chain.list');
Route::get('chain', function () {
    return view('chain');
})->middleware(['auth'])->name('chain');

刀片

<div class="mb-2">
        <div class="w-full rounded shadow-xs">
            <div id='chainInfo' class="p-0 rounded shadow bg-gray-600">
                @php
                    //var_dump($chain);
                @endphp
            </div>
        </div>
    </div>

    <div class="mb-2">
        <div class="w-full rounded shadow-xs">
                <div id='recipients' class="p-0 rounded shadow bg-gray-600">
                    <table class="stripe hover bg-gray-600 text-sm w-full" id="chaining">
                        <thead>
                            <tr class="text-xs font-semibold tracking-wide text-left text-white border-b dark:border-gray-700 bg-gray-500 dark:text-gray-400 dark:bg-gray-800">
                                <th class="px-4 py-3">#</th>
                                <th class="px-4 py-3">User</th>
                                <th class="px-4 py-3">Grand Total</th>
                                <th class="px-4 py-3">Total</th>
                                <th class="px-4 py-3">Lost</th>
                                <th class="px-4 py-3">Hosps</th>
                                <th class="px-4 py-3">Mugs</th>
                                <th class="px-4 py-3">Arrested</th>
                                <th class="px-4 py-3">Attacked</th>
                                <th class="px-4 py-3">Assists</th>
                                <th class="px-4 py-3">Respect gain</th>
                                <th class="px-4 py-3">Respect loss</th>
                                <th class="px-4 py-3">Wall</th>
                            </tr>
                        </thead>
                        <tfoot>
                            <tr class="text-xs font-semibold tracking-wide text-left text-white border-b dark:border-gray-700 bg-gray-500 dark:text-gray-400 dark:bg-gray-800">
                                <th colspan="2" style="text-align:right">Total:</th>
                                <th></th>
                            </tr>
                        </tfoot>                        
                    </table>
                </div>
        </div>
    </div>
<script type="text/javascript">
        $(function () {
            
          
            var table = $('#chaining').DataTable({
                serverSide: true,
                processing: true,
                ajax: "{{ route('chain.list') }}",
                "order": [[3, 'desc']],
                createdRow: function ( row, data, index ) {
                    $(row).addClass('text-xs')
                },
                columnDefs: [
                    { className: "text-right", targets: "_all" },
                ],
                columns: [
                    {data: 'DT_RowIndex', name: 'DT_RowIndex'},
                    {data: 'attacker_name', name: 'attacker name'},
                    {data: 'grand_total', name: 'gtotal'},
                    {
                        data: null,    // this will allow usage of full object
                        render: function ( data, type, full, meta ) {
                            return (data.hosp + data.attack + data.mug + data.arrested);
                        },
                        name: 'total'
                    },
                    {data: 'lost', name: 'lost'},
                    {data: 'hosp', name: 'hosp'},
                    {data: 'mug', name: 'mug'},
                    {data: 'arrested', name: 'arrested'},
                    {data: 'attack', name: 'attacked'},
                    {data: 'assist', name: 'assists'},
                    {data: 'respect', name: 'respect'},
                    {data: 'respectlost', name: 'respect lost'},
                    {data: 'wall', name: 'wall'},
                
                ],
                footerCallback: function ( row, data, start, end, display ) {
                    var api = this.api(), data;
        
                    // Remove the formatting to get integer data for summation
                    var intVal = function ( i ) {
                        return typeof i === 'string' ?
                            i.replace(/[\$,]/g, '')*1 :
                            typeof i === 'number' ?
                                i : 0;
                    };
        
                    // Total over all pages
                    total = api
                        .column( 3 )
                        .data()
                        .reduce( function (a, b) {
                            return intVal(a) + intVal(b);
                        }, 0 );
        
                    // Update footer
                    $( api.column( 2 ).footer() ).html(
                        total
                    );
                },
                paging : false,
                lengthMenu: false,
                searching: false,
                info: false
            }).on( 'order.dt search.dt', function () {
                table.column(0, {search:'applied', order:'applied'}).nodes().each( function (cell, i) {
                    cell.innerHTML = i+1;
                 } );
            } ).columns.adjust();

            setInterval(function () {
                table.ajax.reload();
                console.log('table reloaded')
            }, 10000);
        });
      </script>

我希望能够在我的刀片中访问 $response,并将数据发送到数据表!响应不包含与 $data 相同的数据!

【问题讨论】:

    标签: php laravel laravel-8


    【解决方案1】:

    我认为您可以使用 Laravel 中的视图撰写功能并向视图发送额外的信息。

    您需要在视图服务提供者中注册作曲家。更多信息请查看以下页面

    https://laravel.com/docs/8.x/views#view-composers

    【讨论】:

      猜你喜欢
      • 2019-04-13
      • 2019-12-19
      • 2019-11-13
      • 2017-09-03
      • 2016-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多