leandrogrando/simple-searchable

实现优雅模型搜索方法的一个简单特质

v1.0 2021-10-20 14:49 UTC

This package is auto-updated.

Last update: 2024-09-08 19:28:17 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。