Передача дополнительных данных от контроллера к блейду вместе с данными таблиц данных

#php #laravel #laravel-8

Вопрос:

Я создаю живой отчет, у меня есть данные в таблицах данных, и мне нужно добавить дополнительные данные, которые не имеют отношения к фактической таблице данных.

Контроллер

 $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!

Ответ №1:

Я думаю, что вы можете использовать функцию создания представления в Laravel и отправлять дополнительную информацию в представление.

Вам необходимо зарегистрировать композитора в поставщике услуг просмотра.для получения дополнительной информации посетите страницу ниже

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