如何过滤Laravel Nova中使用BelongsTo字段的选择列表?

时间:2020-04-23 10:35:36

标签: laravel laravel-5 eloquent laravel-nova

我有一个测验资源,用于定义测验中的问题和答案。

BelongsTo字段用于选择该测验的创建者-将该信息从我的用户表中拉出。但是,我只想拉取'role_id'为1或2的用户。

我正在尝试使用相关函数,但它似乎不想识别其存在。

我的测验资源:

class Quiz extends Resource
{
    /**
     * The model the resource corresponds to.
     *
     * @var string
     */
    public static $model = 'App\Quiz\Quiz';

public function fields(Request $request)
    {

        return [
            ...

            BelongsTo::make('User', 'users','\App\Nova\User')
                ->display(function($user){
                        return $user->first_name . ' ' . $user->last_name;
                }),

            ...
        ];
    }
}

我的Nova用户模型:

class User extends Resource
{

     public static $model = 'App\Account\User';

public static function relatableQuizzes(NovaRequest $request, $query)
    {
        return $query->where('role_id', 1);
    }
}

我尝试使用不同的函数名称,包括: 相关用户 相关用户 相关测验 相关测验 相关的测验

但是每次都没有效果。

如何按角色ID过滤此用户列表?

3 个答案:

答案 0 :(得分:2)

在您与Users资源中的Quiz相关时,您是否尝试了另一种方法?

class Quiz extends Resource
{
    // ...

    public static function relatableUsers(NovaRequest $request, $query)
    {
        return $query->where('role_id', 1);
    }
}

答案 1 :(得分:0)

您可以在查询中使用whereIn方法,如下所示:

$users = User::whereIn('role_id', [1,2])->get();

答案 2 :(得分:0)

试试这样的


  public function options(Request $request)
    {

        $supplier = Supplier::all()->mapWithKeys(function($item) {
            return [
                $item['name'] => $item['item']
            ];
        }); 

        return $supplier;
    }