我是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'));
}
}
你应该在Model中使用Sortable
trait,而不是Controller!
你应该放置use Sortable;
和
protected $sortable = [
'id', 'ticket_id', 'type_id', 'start_time', 'end_time', 'user_id', 'note'
];
在模型中。
我认为答案是,使用该包,不可能排序加入!
这个软件包还不能用于连接:(我没有太多时间让它工作。也许在冬天(北半球)。
这里链接:https://github.com/Kyslik/column-sortable/issues/8#issuecomment-134911114
解决方案是:
控制器
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');
}