filipac / searchable
Eloquent 模型搜索特性。
1.0.0
2014-09-15 18:04 UTC
Requires
- php: >=5.4.0
- illuminate/database: 4.2.x
- illuminate/support: 4.2.x
This package is auto-updated.
Last update: 2024-09-25 07:58:47 UTC
README
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], ];