Как сделать данные столбца интерактивными со ссылкой в ​​yajra datatable laravel 5.7

Я пытаюсь сделать значения строки идентификатора интерактивными, которые ссылаются на другое представление. Это достижимо с использованием обычных данных из jQuery во внешнем интерфейсе, например: <td><h6><a href="/users/{{ $user->id }}">{{ $user->id }}</a></h6></td>. Но как мне это сделать с помощью яджры? По какой-то причине yajrabox.com не загружается на моем конце, поэтому я не мог прочитать их документы. Я тоже не могу найти соответствующие руководства. Вот что у меня есть на данный момент.

UsersController:

public function index()
{        
    return view('users.index');
}

public function yajraDT()
{
    return Datatables::of(User::query())->make(true);
}

index.blade.php:

<div class="container">
<h2>Laravel DataTables Tutorial Example</h2>
    <table class="table table-bordered" id="tableDT">
        <thead>
            <tr>
                <th class="text-left">Id</th>
                <th class="text-left">First Name</th>
                <th class="text-left">Last Name</th>
                <th class="text-left">Email</th>
                <th class="text-left">Gender</th>
                @if(Auth::check() && Auth::user()->type == "Admin")
                <th class="text-left">Actions</th>
                @endif
            </tr>
        </thead>
    </table>

<script>
     $(function() {
           $('#tableDT').DataTable({
           processing: true,
           serverSide: true,
           ajax: '{{ url('users/yajraDT') }}',
           columns: [
                    { data: 'id', name: 'id' },
                    { data: 'first_name', name: 'first_name' },
                    { data: 'last_name', name: 'last_name' },
                    { data: 'email', name: 'email' },
                    { data: 'gender', name: 'gender' }
                 ]
        });
     });
</script>

routes.web:

Route::get('users/yajraDT', 'UsersController@yajraDT');
Route::resource('users', 'UsersController');

person codex    schedule 21.02.2019    source источник
comment
Итак, вы хотите вернуть данные столбца RAW в лезвие, например ‹a› ‹/a› или ‹button› ‹/button›? это верно ?   -  person Vipertecpro    schedule 21.02.2019
comment
@ViperTecPro да, это правильно, я хочу вернуть HTML-ссылку в данных столбца, чтобы она стала интерактивной.   -  person codex    schedule 22.02.2019


Ответы (2)


Вы можете передать функцию рендеринга своим данным следующим образом:

{ data: 'id', name: 'id', render:function(data, type, row){
    return "<a href='/users/"+ row.id +"'>" + row.id + "</a>"
}},

Это обернет весь <td> в этот тег привязки. Однако мне интересно, столкнетесь ли вы с проблемами с собственным атрибутом ID DataTable. Поэтому я не уверен, вернет ли row.id ваш id или DataTables. Если вы добавите console.log(row) перед оператором return, вы должны найти объект, которым вы можете манипулировать в функции рендеринга, так что вы сможете найти там то, что вам нужно, если row.id не возвращает правильный идентификатор.

person N Mahurin    schedule 22.02.2019
comment
Спасибо за то, что я искал! - person codex; 22.02.2019

Вы можете использовать rawColumns api из контроллера. Проверьте это: http://yajrabox.com/docs/laravel-datatables/master/raw-columns

$users = User::query();
return Datatables::of($users)
    ->addColumn('id', function ($user) {
        return '<h6><a href="/users/'. $user->id .'">'. $user->id .'</a></h6>';
    })
    ->rawColumns(['id'])
    ->make(true);
person A. Zaman    schedule 21.06.2019
comment
Этот ответ отлично сработал для меня. - person Carlos Riquelme; 29.12.2020