leandrogrando / simple-searchable
实现优雅模型搜索方法的一个简单特质
v1.0
2021-10-20 14:49 UTC
README
Simple Searchable 是为 Laravel 设计的一个特质,它为 Eloquent 模型添加了简单的搜索功能,灵感来源于包 nicolaslopezj/searchable。Simple Searchable 允许您搜索包括 belongsTo 关联中的关系字段在内的表。这不是针对大型搜索进行优化的,但有时您只需要让它简单(尽管它并不慢)。
安装
在您的应用程序中运行以下命令
composer require leandrogrando/simple-searchable
用法
将特质添加到您的模型和搜索字段(搜索字段是可选的。 您可以在运行时定义它们。)
use LeandroGrando\SimpleSearchable\SimpleSearchable; class User extends Model { use SimpleSearchable; /** * Searchable fields. * * @var array */ protected $searchable = [ 'name', 'email', 'city.name' // Field in a relationship 'city.status.name' // Field in a multi relationship ]; public function city() { return $this->belongsTo('City::class'); } }
现在您可以搜索您的模型。搜索方法接受两个参数,第一个 $query 是一个必须的字符串,包含搜索词,而第二个是可选的 $searchable 数组。如果使用,它将用数组中提供的信息替换模型的搜索字段。
// Simple search // $query = 'my search term' $users = User::search($query)->get(); // Search and get relations // It will not get the relations if you don't do this $users = User::search($query) ->with('city.state') ->get();
搜索分页
就像 Laravel 默认查询一样简单
// Search with relations and paginate $users = User::search($query) ->with('city.state') ->paginate(20);
混合查询
搜索方法与任何 Eloquent 方法兼容。您可以这样做
// Search only active users $users = User::where('status', 'active') ->search($query) ->paginate(20);
在运行时指定搜索字段
如果需要,您可以在搜索方法的第二个参数中传递一个包含搜索字段的数组
$users = User::search($query, [ 'city.name', 'city.state.name' 'city.state.uf' ])-get();
在上面的例子中,User 模型的可搜索属性被忽略,并使用了第二个参数数组中传递的字段。
贡献
欢迎任何人为该项目做出贡献。Fork,进行您的更改,然后提交一个 pull request。