titasgailius/search-relations
| Install | |
|---|---|
composer require titasgailius/search-relations |
|
| Latest Version: | v2.0.0 |
| PHP: | >=7.1.0 |
| License: | MIT |
| Last Updated: | Feb 25, 2026 |
| Links: | GitHub · Packagist |
Search relationships in Laravel Nova
This package allows you to include relationship columns into Laravel Nova search query.
Screenshot

Installation
composer require titasgailius/search-relations
Next, add Titasgailius\SearchRelations\SearchesRelations trait to your base resource class App\Nova\Resource
use Titasgailius\SearchRelations\SearchesRelations;
abstract class Resource extends NovaResource
{
use SearchesRelations;
Usage
Simply add public static $searchRelations variable to any of your Nova resources.
This array accepts a relationship name as a key and an array of searchable columns as a value.
/**
* The relationship columns that should be searched.
*
* @var array
*/
public static $searchRelations = [
'user' => ['username', 'email'],
];
Alternatively, you may add a static searchableRelations() method to return an array of searchable relations.
/**
* Get the searchable columns for the resource.
*
* @return array
*/
public static function searchableRelations(): array
{
return [
'user' => ['username', 'email'],
];
}
Global search
You may customize the rules of your searchable relationships for global search by defining the $globalSearchRelations property.
/**
* The relationship columns that should be searched globally.
*
* @var array
*/
public static $globalSearchRelations = [
'user' => ['email'],
];
Alternatively, you may add a static globallySearchableRelations() method to return an array of globally searchable relations.
/**
* Get the searchable columns for the resource.
*
* @return array
*/
public static function globallySearchableRelations(): array
{
return [
'user' => ['email'],
];
}
Disabling global search for relationships
You may disable the global relationship search by declaring $globalSearchRelations with an empty array.
/**
* The relationship columns that should be searched globally.
*
* @var array
*/
public static $globalSearchRelations = [];
Alternatevily, you may disable the global search for relationships by setting the $searchRelationsGlobally property to false.
/**
* Determine if relations should be searched globally.
*
* @var array
*/
public static $searchRelationsGlobally = false;
Nested relationships
You may search nested relationships using dot notation.
/**
* The relationship columns that should be searched.
*
* @var array
*/
public static $searchRelations = [
'user.country' => ['code'],
];
Extending Search
You may apply custom search logic for the specified relations by retuning a class implementing a Search interface.
/**
* Get the searchable columns for the resource.
*
* @return array
*/
public static function searchableRelations(): array
{
return [
'country' => new LocationSearch(['USA', 'UK']),
];
}
Your custom search class must implement a simple Search interface that has a single method which accepts
the current query $query, a relationship name $relation and a search input $search.
<?php
namespace Titasgailius\SearchRelations\Contracts;
use Illuminate\Database\Eloquent\Builder;
interface Search
{
/**
* Apply search for the given relation.
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @param string $relation
* @param string $search
* @return \Illuminate\Database\Eloquent\Builder
*/
public function apply(Builder $query, string $relation, string $search): Builder;
}
You may take a look at the Titasgailius\SearchRelations\Searches\RelationSearch class as an example.
Related Packages
Automatic url parameter mapping to sort, filter, include and select data in an e...
PostgreSQL Full Text Search Driver for Laravel Scout
Laravel Scout provides a driver based solution to searching your Eloquent models...
Driver for Laravel Scout search package based on https://github.com/teamtnt/tnts...