【问题标题】:Display specific eloquent query in nova resource index view在 nova 资源索引视图中显示特定的 eloquent 查询
【发布时间】:2019-05-22 17:50:46
【问题描述】:
我想在 nova 资源的索引视图中显示以下 eloquent
Post::where('frontpage', true)->get()
并执行 Post 模型 CRUD 操作,我该怎么做?
【问题讨论】:
-
您是否尝试创建lense 来自定义底层的雄辩查询?
-
标签:
laravel
laravel-5
laravel-nova
【解决方案1】:
您可以简单地覆盖您的 Nova 资源的 indexQuery,Reference
/**
* Build an "index" query for the given resource.
*
* @param \Laravel\Nova\Http\Requests\NovaRequest $request
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function indexQuery(NovaRequest $request, $query)
{
return $query->where('frontpage', true);
}
【解决方案2】:
Nova 利用lenses 的概念来做到这一点。
从命令行创建一个新镜头:
php artisan nova:lens IsFrontpage
修改app/Nova/Lenses/IsFrontpage.php中的query()方法:
public static function query(LensRequest $request, $query)
{
return $request->withOrdering($request->withFilters(
$query->where('frontpage', '=', true)
));
}
将镜头附加到资源:
public function lenses(Request $request)
{
return [
new IsFrontpage()
];
}
在 Nova 管理面板中访问镜头:/nova/resources/posts/lens/is-frontpage
仔细查看 Nova documentation 以自定义 URL slug(请参阅 uriKey())和列(请参阅 fields())。