aviator/eloquent-search-map

该包已被弃用且不再维护。未建议替代包。

一个用于轻松搜索模型的Eloquent宏

0.1.1 2017-11-29 13:47 UTC

This package is auto-updated.

Last update: 2024-04-21 19:46:11 UTC


README

Build Status Latest Stable Version License

概览

使用此Eloquent宏轻松添加Eloquent查询搜索约束。

当你经常需要构建简单的可选搜索时,这特别方便。

$model::when($request->something, function (Builder $query) {
    return $query->where('column', 'like', '%' . $request->something . '%'); 
})->get();

使用此包,你可以这样做

$model::search(['something', 'otherthing'])->get();

你可以在模型上创建一个可选的列映射,以及动态映射请求属性。

安装

通过Composer

composer require aviator/eloquent-search-map

在你的 config/app.php 中,将 Aviator\Search\ServiceProvider::class 添加到 providers 数组

'providers' => [
    ...
    Aviator\Search\ServiceProvider::class,
],

测试

通过Composer

composer test

使用方法

模型设置

首先,使你想要搜索的模型实现 Searchable 合同并使用 SearchableTrait

class User extends Model implements Searchable
{
    use SearchableTrait;
   
    // ..etc
}

然后在你的模型上设置一个包含你的可搜索列的 searches 数组属性。要使用 $model::search(['email']) 在电子邮件列中进行搜索

protected $searches = [
    'email'
];

要使用 $model::search(['alias']) 在电子邮件列中进行搜索

protected $searches = [
    'alias' => 'email'
];

请求别名

默认情况下,搜索构建器假定列名或别名与请求数据匹配。因此,如果你调用 $model::search(['something']),它将查找 request('something')

当然,你可以手动指定请求属性名称

$model::search(['email' => 'user_email'])->get();

这告诉搜索构建器在 request('user_email') 而不是默认情况下查找 email 请求数据。

自定义请求

如果你需要将自定义请求传递到宏中,请使用第二个参数,该参数接受一个扩展 Illuminate\Http\Request 的对象

$model::search(['term'], $request)->get();

当然,这是完全可选的。如果没有提供请求,它将从容器中检索。

相关模型

如果你想查询相关模型,你可以!使用点表示法

protected $searches = [
    'relation.column'
];

这将查找一个名为 company() 的关系方法,并在查询中添加一个 whereHas 约束。例如

$users = User::search(['company.city'])->get();

这将查找 User 模型上的关系 company() 并在该模型的 city 属性中进行搜索。

默认情况下,我们假设请求将具有相同的属性,即蛇形命名。对于上述查询约束,搜索构建器将查找 request('company_city')

这也可以进行映射

$users = User::search(['company.city' => 'city'])->get();

现在搜索构建器将查找 request('city') 而不是。

其他事项

许可证

此包使用 MIT 许可证 (MIT) 许可。