在 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 字段,并将其显示在列表页中

laravel-admin filter 字段添加表名

原文地址: https://www.cveoy.top/t/topic/cqbk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录