Laravel在网格列排序问题

时间:2019-04-14 15:40:56

标签: laravel jquery-ui-sortable

我是Laravel的新手,并且正在Laravel 5.8和SqlServer中开发一个站点。

此刻,我面临可排序列网格的问题。 我已遵循有关Kyslink软件包的说明:https://github.com/Kyslik/column-sortable

但是由于我不明白的原因,当我尝试打开带有可排序网格的页面时,出现以下消息:“调用未定义的方法Illuminate \ Database \ Query \ Builder :: sortable()” < / p>

我在互联网上找到了很多有关此的建议,但这些建议都不适合我。

也许原因是我的网格重现了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 :(得分:0)

您应该在模型中使用Sortable特性,而不是Controller!

您应该放置use Sortable;

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

在模型中。

答案 1 :(得分:0)

我认为答案是,使用该软件包无法对联接进行排序!

  

该程序包还不能用于联接:(而且我没有很多   是时候让它工作了。也许在冬天(北半球)。

此处是链接:https://github.com/Kyslik/column-sortable/issues/8#issuecomment-134911114

答案 2 :(得分:0)

解决方案是:

控制器

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'));
    }   
}

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')); } }

这是模型:


    

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'); }

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'); }