titasgailius / search-relations
Laravel Nova 工具。
2.0.1
2021-07-16 15:55 UTC
Requires
- php: >=7.1.0
README
在 Laravel Nova 中搜索关系
此包允许您将关系列包含到 Laravel Nova 搜索查询中。
截图
安装
composer require titasgailius/search-relations
接下来,将 Titasgailius\SearchRelations\SearchesRelations
特性添加到您的基资源类 App\Nova\Resource
use Titasgailius\SearchRelations\SearchesRelations; abstract class Resource extends NovaResource { use SearchesRelations;
用法
简单地在您的任何 Nova 资源中添加 public static $searchRelations
变量。此数组接受一个关系名称作为键,一个可搜索列的数组作为值。
/** * The relationship columns that should be searched. * * @var array */ public static $searchRelations = [ 'user' => ['username', 'email'], ];
或者,您可以为返回可搜索关系的数组添加一个静态的 searchableRelations()
方法。
/** * Get the searchable columns for the resource. * * @return array */ public static function searchableRelations(): array { return [ 'user' => ['username', 'email'], ]; }
全局搜索
通过定义 $globalSearchRelations
属性,您可以自定义可搜索关系的规则以进行全局搜索。
/** * The relationship columns that should be searched globally. * * @var array */ public static $globalSearchRelations = [ 'user' => ['email'], ];
或者,您可以为返回全局可搜索关系的数组添加一个静态的 globallySearchableRelations()
方法。
/** * Get the searchable columns for the resource. * * @return array */ public static function globallySearchableRelations(): array { return [ 'user' => ['email'], ]; }
禁用关系全局搜索
您可以通过声明一个空的数组 $globalSearchRelations
来禁用全局关系搜索。
/** * The relationship columns that should be searched globally. * * @var array */ public static $globalSearchRelations = [];
或者,您可以通过将 $searchRelationsGlobally
属性设置为 false
来禁用关系的全局搜索。
/** * Determine if relations should be searched globally. * * @var array */ public static $searchRelationsGlobally = false;
嵌套关系
您可以使用点符号来搜索嵌套关系。
/** * The relationship columns that should be searched. * * @var array */ public static $searchRelations = [ 'user.country' => ['code'], ];
扩展搜索
您可以通过返回一个实现 Search
接口的类来为指定的关系应用自定义搜索逻辑。
/** * Get the searchable columns for the resource. * * @return array */ public static function searchableRelations(): array { return [ 'country' => new LocationSearch(['USA', 'UK']), ]; }
您的自定义搜索类必须实现一个简单的 Search
接口,该接口有一个方法,接受当前的查询 $query
、关系名称 $relation
和搜索输入 $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; }
您可以查看 Titasgailius\SearchRelations\Searches\RelationSearch
类作为示例。