Refine is a powerful, visual query builder for Laravel (and Rails!)
This repository is the integration for Refine and Laravel Nova.
Refine is a paid package, currently in early access. If you would like to try it out, please send me an email at aaron@hammerstone.dev or DM me on Twitter.
To use Refine with Nova, you must first require the package composer require hammerstone/refine-nova
. This will
install hammerstone/refine-laravel
as well.
To use Refine with one of your Nova resources, add the RefinesModels
trait to your resource.
class Company extends Resource
{
use RefinesModels;
}
In your AppServiceProvider (or FilterServiceProvider if you want) you'll need to tell Refine to use the Vue2 frontend.
public function boot()
{
Clause::$resolveComponentUsing = Vue2Frontend::class;
}
This will require you to implement a single method called refineFilter
. From this method you will return the filter
that applies to this resource. (To learn more about creating filters, see
the Refine documentation.)
public static function refineFilter(NovaRequest $request)
{
// The filter to use for this resource.
return CompanyFilter::class;
}
To accomplish the actual filtering, you'll want to modify the indexQuery
method to activate the Refine filter:
public static function indexQuery(NovaRequest $request, $query)
{
// Run this request + query through Refine.
static::refine($request, $query);
}
Finally, to show the builder on the frontend, you'll need to add the Refine card.
public function cards(Request $request)
{
return [
RefineCard::forFilter(static::refineFilter($request))
];
}
That's all you need to do!