laravel-admin filter 字段添加表名
在 Laravel-Admin 中,如果需要在 filter 中添加表名,可以使用 DB::raw() 方法来实现。例如,假设我们有一个名为 users 的表和一个名为 roles 的表,我们想要在用户列表页的 filter 中添加一个 roles 的下拉选项,我们可以在 User 模型中定义一个 scopeFilterRole() 方法来实现:
public function scopeFilterRole($query, $value)
{
return $query->leftJoin('roles', 'users.role_id', '=', 'roles.id')
->where('roles.name', 'like', "%$value%");
}
然后,在 User 模型中定义一个 filter 方法,将 roles 字段添加到 filter 中:
public function filter()
{
$this->filter(function ($filter) {
$filter->column(1 / 3, function ($filter) {
$filter->like('name', 'Name');
});
$filter->column(1 / 3, function ($filter) {
$filter->equal('gender', 'Gender')->radio([
'' => 'All',
'male' => 'Male',
'female' => 'Female',
]);
});
$filter->column(1 / 3, function ($filter) {
$filter->where(function ($query) use ($filter) {
$input = $filter->input;
$query->where('roles.name', 'like', "%$input%");
}, 'Role');
});
});
}
在上面的代码中,我们使用了 where 方法来添加一个自定义的筛选器,其中,我们使用了 DB::raw() 方法来将查询条件中的 roles.name 加上了表名。
最后,我们需要在用户列表页的视图中添加一个 roles 字段的下拉选项,这可以通过在 grid 方法中添加一个 column 来实现:
public function grid()
{
$grid = new Grid(new User);
$grid->column('id', 'ID')->sortable();
$grid->column('name', 'Name');
$grid->column('email', 'Email');
$grid->column('gender', 'Gender');
$grid->column('role.name', 'Role');
$grid->column('created_at', 'Created at');
$grid->column('updated_at', 'Updated at');
return $grid;
}
在上面的代码中,我们使用了 role.name 来访问 roles 表中的 name 字段,并将其显示在列表页中
原文地址: https://www.cveoy.top/t/topic/cqbk 著作权归作者所有。请勿转载和采集!