filipac/searchable

Eloquent 模型搜索特性。

1.0.0 2014-09-15 18:04 UTC

This package is auto-updated.

Last update: 2024-09-25 07:58:47 UTC


README

Filipac/searchable

Searchable 是 Laravel 4.2+ 的特性,为 Eloquent 模型添加简单的搜索功能。

Searchable 允许为每个模型自定义列和相关性。

安装

只需将此包添加到您的 composer.json 文件中,然后运行 composer update

"filipac/searchable": "1.0.*"

使用方法

将特性添加到您的模型和搜索规则中。

use Filipac\Searchable\SearchableTrait;

class User extends \Eloquent
{
	use SearchableTrait;

    /**
     * Searchable rules.
     *
     * @var array
     */
    protected $searchable = [
        ['column' => 'first_name', 'relevance' => 10],
        ['column' => 'last_name', 'relevance' => 10],
        ['column' => 'bio', 'relevance' => 2],
        ['column' => 'email', 'relevance' => 5],
    ];
}

现在您可以搜索您的模型了。

// Simple search
$users = User::search($query)->get();

// Search and get relations
$users = User::search($query)
->with('photos')
->get();

搜索分页

Laravel 默认分页与该功能不兼容,您必须这样做

// This class is required
use Filipac\Searchable\DBHelper;
// Get the current page values
$page = Input::get('page') ? Input::get('page') : 1;
$count = Input::get('count') ? Input::get('count') : 20; // items per page
$from = 1 + $count * ($page - 1);

// Perform the search
$data = User::search($query)
->take($count)
->skip($from - 1)
->get()
->toArray();

// Get the count of rows of the last query
$db_query_log = DB::getQueryLog();
$db_query = end($db_query_log);
$total_items = DBHelper::getQueryCount($db_query);

// Create the paginator
$users = Paginator::make($data, $total_items, $count);

如果您想通过关系搜索,可以添加以下内容到所需的模型中

protected $joinable = [
    'profiles' => ['users.profile_id','profiles.id']
    ];

上面的代码将基于 users.profile_id = profiles.id 连接 profiles 表。然后您可以在 profiles 表中进行以下搜索

/**
     * Searchable rules.
     *
     * @var array
     */
    protected $searchable = [
        ['column' => 'name', 'relevance' => 10],
        ['column' => 'profiles.name', 'relevance' => 1],
        ['column' => 'profiles.description', 'relevance' => 2],
    ];