Laravel проблема в сортировке столбцов сетки - PullRequest
0 голосов
/ 14 апреля 2019

Я довольно новичок в Laravel и разрабатываю сайт на Laravel 5.8 и SqlServer.

В данный момент я столкнулся с проблемой сортируемой сетки столбцов. Я выполнил инструкцию о пакете Kyslink: https://github.com/Kyslik/column-sortable.

но по непонятной мне причине, когда я пытаюсь открыть страницу с сортируемой сеткой, появляется следующее сообщение: «Вызов неопределенного метода Illuminate \ Database \ Query \ Builder :: sortable ()»

Я нашел много предложений по этому поводу в интернете, но ни одно из них мне не подошло.

Может быть, причина в том, что моя сетка воспроизводит представление sql?

Если я удалю метод sortable (), представление будет работать.

// Код моего метода контроллера выглядит так

class AdminController extends Controller
{
    use Sortable;

    protected $sortable = [
       'id', 'ticket_id', 'type_id', 'start_time', 'end_time', 'user_id', 'note'
    ];

    public function activities() {

       try {
            $activities = DB::table('activities')
            ->leftJoin('users', 'activities.user_id', '=', 'users.id')
            ->leftJoin('types', 'activities.type_id', '=', 'types.id')
            ->leftJoin('tickets', 'activities.ticket_id', '=', 'tickets.id')
            ->select('activities.*', 'users.name as user_name', 'types.description as type_description', 'tickets.subject')
            ->sortable()
            ->paginate(config('app.num_pages'));
        }
        catch (\Kyslik\ColumnSortable\Exceptions\ColumnSortableException $e) {
            dd($e);
        }

        return view('activity.activities', compact('activities'));
    }
}

Ответы [ 3 ]

0 голосов
/ 18 апреля 2019

Я думаю, что ответ заключается в том, что с этим пакетом невозможно сортировать объединение!

Этот пакет еще не работает с объединениями :( и у меня не так много времени, чтобызаставить его работать. Возможно зимой (северное полушарие).

вот ссылка: https://github.com/Kyslik/column-sortable/issues/8#issuecomment-134911114

0 голосов
/ 18 апреля 2019

Решение:

Контроллер

</p> <pre><code>class AdminController extends Controller { public function activities() { $activities = Activity::with('user')->with('type')->select(['*'])->sortable()->paginate(config('app.num_pages')); return view('activity.activities', compact('activities')); } }

Это модель:

<pre><code>namespace App; use Illuminate\Database\Eloquent\Model; use Kyslik\ColumnSortable\Sortable; class Activity extends Model { use Sortable; protected $table = 'activities'; protected $fillable = [ 'ticket_id', 'type_id', 'start_time', 'end_time', 'user_id', 'note' ]; protected $sortable = [ 'id', 'ticket_id', 'type_id', 'start_time', 'end_time', 'user_id', 'note' ]; public function user() { return $this->hasOne(User::class, 'id', 'user_id'); } public function type() { return $this->hasOne(Type::class, 'id', 'type_id'); }

0 голосов
/ 14 апреля 2019

Вы должны использовать черту Sortable в модели, а не в контроллере!

Вы должны поставить use Sortable; и

protected $sortable = [
    'id', 'ticket_id', 'type_id', 'start_time', 'end_time', 'user_id', 'note'
];

в модели.

...