Laravel-datatables: Поиск: ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΏΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 1 июн. 2016  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: yajra/laravel-datatables

ΠšΡ€Π°Ρ‚ΠΊΠΎΠ΅ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΈΠ»ΠΈ запроса Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ΠžΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ Β«ΠΎΠ΄ΠΈΠ½ ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌΒ» ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°ΡŽΡ‚ΡΡ посрСдством сохранСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°-Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НапримСр: ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ управляСт ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ»ΠΈ нСсколькими Ρ†Π΅Π½Ρ‚Ρ€Π°ΠΌΠΈ. ПослС установки столбцов с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ построитСля html я Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΡŽ столбСц coodinator_id ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа для получСния ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°:

public function getFullNameAttribute()
{
    return $this->first_name . ", " . $this->last_name;
}

Моя Ρ†Π΅Π»ΡŒ - Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ†Π΅Π½Ρ‚Ρ€Ρ‹, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Ρƒ, Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π½Π΅ являСтся администратором, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΌΠΎΠΈΡ… запросах.
Однако, Ссли я Π²Π²ΠΎΠΆΡƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ столбца ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ появляСтся Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎΠ½ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚, Ρ‡Ρ‚ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΡ… записСй Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ.

Как ΠΌΠ½Π΅ этого Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ?

ΠžΠΏΠΈΡˆΠΈΡ‚Π΅ здСсь Π²Π°ΡˆΡƒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ / запрос Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹

Если Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ копию своСго ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСт ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ. Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Π³ΠΈ PHP-ΠΊΠΎΠ΄Π° ΡƒΡ†Π΅Π½ΠΊΠΈ для форматирования вставки:
<?php

namespace App\DataTables;
use Auth;
use App\Center;
use App\Coordinator;
use Yajra\Datatables\Services\DataTable;

class CentersDataTable extends DataTable
{
    // protected $printPreview  = 'path.to.print.preview.view';

    /**
     * Display ajax response.
     *
     * <strong i="13">@return</strong> \Illuminate\Http\JsonResponse
     */
    public function ajax()
    {
        return $this->datatables
            ->eloquent($this->query())
            ->editColumn('action', function ($center) {
                return '<a href="edit-center/'.$center->id.'" <i class="material-icons sideicons-tables">create</i>'; 
               // <a href="field-technician-delete/'.$user->id.'" <i class="material-icons sideicons-tables">delete</i>
            })
            ->editColumn('coordinator_id', function ($user) {
                return Coordinator::find($user->coordinator_id)->full_name;
                })
            ->editColumn('gps_lat', function ($center) {
                    return $center->gps_location ;
                })
            ->make(true);
    }

    /**
     * Get the query object to be processed by datatables.
     *
     * <strong i="14">@return</strong> \Illuminate\Database\Query\Builder|\Illuminate\Database\Eloquent\Builder
     */
    public function query()
    {
        if(Auth::user()->hasRole('admin')){
        $centers = Center::query();
        return $this->applyScopes($centers);
        }
        else{
            $centers = Center::query()->where('coordinator_id',Auth::user()->userable->id);
            return $this->applyScopes($centers);
        }
    }

    /**
     * Optional method if you want to use html builder.
     *
     * <strong i="15">@return</strong> \Yajra\Datatables\Html\Builder
     */
    public function html()
    {
        return $this->builder()
             ->columns([
                'id' => ['title' => 'ID'],
                'center_name' => ['title' => 'Name'], 
                'gps_lat' => ['title' => 'Coordinates'],
                'contact_no' => ['title' => 'Contact Number'],
                'coordinator_id' => [
                            'title' => 'Coordinator',
                            'searchable' => true
                ],
                'created_at' => [ 'title' => 'Created'],
                 'updated_at' => ['title' => 'Updated'], 
                'action' => [
                             'data'           => 'action',
                            'name'           => 'action',
                            'render'         => null,
                            'orderable'      => false,
                            'searchable'     => false,
                            'exportable'     => false,
                            'printable'      => false
                             ]
             ])
             ->parameters([
                 'dom' => 'Bfrtip',
                 'buttons' => ['csv', 'excel', 'print','reload'],
             ]);
    }

    /**
     * Get columns.
     *
     * <strong i="16">@return</strong> array
     */
    private function getColumns()
    {
        return [
            'id',
            // add your columns
            'created_at',
            'updated_at',
        ];
    }

    /**
     * Get filename for export.
     *
     * <strong i="17">@return</strong> string
     */
    protected function filename()
    {
        return 'centers';
    }
}

Π”Π΅Ρ‚Π°Π»ΠΈ систСмы

  • ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма: OS X El Capitan 10.11.5
  • ВСрсия PHP: 7.0.0
  • ВСрсия Laravel: 5.1.36 (LTS)
  • ВСрсия Laravel-Datatables: 6.11.5

Π‘ ΡƒΠ²Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ,

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π£Π»ΠΎΠ²ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, - это Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Π° столбца Π² js, Π½ΠΎ ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск:

'last_name' => [
    'data' => 'coordinator.last_name',
    'visible' => false,
    'name' => 'coordinator.last_name',
],
'coordinator' => [
    'data' => 'coordinator',
    'name' => 'coordinator.first_name',
],

->addColumn('coordinator', function ($user) {
    return Area_Coordinator::find($user->area_coordinator_id)->full_name;
})

ВсС 3 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°? Π’ этом случаС Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈΠ»ΠΈ запросы Π½Π°

Π― ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π» Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½ΡƒΡŽ Π² соотвСтствии с инструкциями Π½Π° вашСм сайтС. Однако Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ моя ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ я Ρ…Ρ€Π°Π½ΡŽ Π½Π΅ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€ΠΎΠ², Π° ΠΈΡ… имя ΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ. Π§Ρ‚ΠΎ Ρƒ мСня Π΅ΡΡ‚ΡŒ сСйчас:
запрос

$centers = Center::query()->with('coordinator')->where('coordinator_id',Auth::user()->userable->id);
            return $this->applyScopes($centers);

столбцы

'first_name' => [
                'data' => 'coordinator.first_name',
                'name' => 'coordinator.first_name',
                            'title' => 'Coordinator',
                            'searchable' => true,
                ],

ΠΌΠ΅Ρ‚ΠΎΠ΄ рСдактирования

->editColumn('first_name', function ($user) {
                return Area_Coordinator::find($user->area_coordinator_id)->full_name;
                })

Однако я ΠΌΠΎΠ³Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ΠΎΡ€Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ я Ρ…ΠΎΡ‡Ρƒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ поиск ΠΏΠΎ этому ΠΈΠΌΠ΅Π½ΠΈ ΠΈ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ, Π΅ΡΡ‚ΡŒ Π»ΠΈ способ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ ΠΈΡ… Π² ΠΎΠ΄ΠΈΠ½ столбСц? Или, скорСС, ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠΎΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ доступа, ΠΈΠ»ΠΈ я Π΄ΠΎΠ»ΠΆΠ΅Π½ просто Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ столбСц с Ρ„Π°ΠΌΠΈΠ»ΠΈΠ΅ΠΉ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π΄Π°Π½Π½Ρ‹Ρ…?

Π‘ ΡƒΠ²Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ,

Π£Π»ΠΎΠ²ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, - это Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ±Π° столбца Π² js, Π½ΠΎ ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ поиск:

'last_name' => [
    'data' => 'coordinator.last_name',
    'visible' => false,
    'name' => 'coordinator.last_name',
],
'coordinator' => [
    'data' => 'coordinator',
    'name' => 'coordinator.first_name',
],

->addColumn('coordinator', function ($user) {
    return Area_Coordinator::find($user->area_coordinator_id)->full_name;
})
Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ