Refine for Laravel Nova
Refine is a paid package. To purchase, head to hammerstone.dev.
Installation
To use Refine with Nova, you must first require the package composer require hammerstone/refine-nova. This will
install hammerstone/refine-laravel as well.
Modifying the Resource
To use Refine with one of your Nova resources, add the RefinesModels trait to your resource.
class Company extends Resource{ use RefinesModels;}
This will require you to implement a single method called refineFilter. From this method you will return the filter
class that applies to this resource. (To learn more about creating filters, see
the Creating Filters section.)
class Company extends Resource{ use RefinesModels; public static function refineFilter(NovaRequest $request) { // The filter to use for this resource. return CompanyFilter::class; }}
To activate the filtering, you'll need to modify the indexQuery method to hook into the Nova lifecycle:
class Company extends Resource{ use RefinesModels; public static function indexQuery(NovaRequest $request, $query) { // Run this request + query through Refine. static::refine($request, $query); }}
To show the query builder on the frontend, add the Refine card to your cards array.
class Company extends Resource{ use RefinesModels; public function cards(Request $request) { return [ RefineCard::forFilter(static::refineFilter($request)) ]; }}
Configuring the Frontend
Add the following code in a service provider to tell Refine to use the Vue2 frontend.
public function boot(){ Clause::$resolveComponentUsing = Vue2Frontend::class;}
Initial Query
When using the Nova integration, the initial query is provided by Nova. Because Nova handles so much authentication, authorization, and showing/hiding of resources, Refine hooks into the Nova request instead of generating its own query.
use Hammerstone\Refine\Filter; class CompanyFilter extends Filter{ public function initialQuery() { // You can leave this blank, it's provided by Nova! } public function conditions() { // @TODO }}