Laravel 5 拉维尔新星贝朗斯托过滤器
我有一个表冠军和一个表用户。我也有相同的型号(冠军和用户) 在一次锦标赛中,可能有一名主裁判、主秘书和主裁判操作员。它们都是我的应用程序中的角色,存储在roles表中 我创建了一个新的资源锦标赛,有3个领域。所有这些都是可搜索的Laravel 5 拉维尔新星贝朗斯托过滤器,laravel-5,eloquent,laravel-nova,Laravel 5,Eloquent,Laravel Nova,我有一个表冠军和一个表用户。我也有相同的型号(冠军和用户) 在一次锦标赛中,可能有一名主裁判、主秘书和主裁判操作员。它们都是我的应用程序中的角色,存储在roles表中 我创建了一个新的资源锦标赛,有3个领域。所有这些都是可搜索的 BelongsTo::make('Main judge', 'mainJudge', User::class) ->onFormsAndDetail() ->searchable(),
BelongsTo::make('Main judge', 'mainJudge', User::class)
->onFormsAndDetail()
->searchable(),
BelongsTo::make('Main secreatary', 'mainSecretary', User::class)
->onFormsAndDetail()
->searchable(),
BelongsTo::make('Judge operator', 'judgeOperator', User::class)
->onFormsAndDetail()
->searchable(),
在搜索过程中,我需要筛选查询,以便只搜索具有相同角色的用户
例如,在搜索主判断期间,我必须在查询中包含下一个过滤器
select *
from users u
join users_roles ur on u.id = ur.user_id
join roles r on ur.role_id = r.id
where r.alias = 'judge'
我在app/Nova/Resource.php中找到了一些方法,比如relatableQuery,但是如果我有3个User字段,我如何在User Resource中使用它。在championresource上,您必须创建带有关系名称的函数 e、 g 实现这一点的最简单(非官方)方法是嗅探请求URL的结构。记住这一点,您可以简单地重写
Nova/User
类中的relatableQuery
方法
这就是它的实现方法,请记住,strtolower
功能是可选的,只会为区分大小写的打字省去不必要的麻烦
公共静态函数relatableQuery(NovaRequest$request$query)
{
$requestSegment=strtolower($request->segment(4));
如果($requestSegment=='mainjudge'){
返回$query->where(…);
}
如果($requestSegment=='main secretary'){
返回$query->where(…);
}
如果($requestSegment=='judgeoperator'){
返回$query->where(…);
}
返回$query;
}
您确定我必须在championship resource上创建相关方法吗?因为AssociateTableQueryMethod搜索用户模型上的relatable方法
public static function relatableMainSecretary(NovaRequest $request, $query)
{
return $query->where(...);
}