巧用字段映射实现指定字段的搜索 
                                                    
                        
                    
                    
  
                    
                    - 前言
注:本文假设你使用了 Repository ( BaseRepository) 
我们在使用搜索的时候,可能会有以下需求:
- 数据库字段不被暴露出来
 - 搜索的代码尽可能公用化
 
ok,我们来一起实现吧
- 
在
Model里定义一个public变量public $searchField =[ 'username' => 'name', 'type' => 'user_type', 'game_id' => 'game_type_id', 'status' => 'user_status', ]; //在这里做字段映射这里已经完成了字段映射的相关操作,继续
 - 
在
Repository里注入这个变量public function __construct(User $user) { $this->model = $user; $this->searchField = $user->searchField; }此处之所以单独将映射注入是因为:可能会有非公用查询导致完整的对象实例变成Builder对象而导致无法取到映射字段的情况。
 - 
在
BaseRepository的paginate方法里增加以下代码$params = \Request::all(); $fields = isset($this->searchField) ? $this->searchField :[]; if (count($fields) > 0 ){ foreach ($params as $param => $value ) { if (array_has($fields , $param )){ $this->model = $this->model->where( array_get( $fields , $param ) , $value); } } } 
在URL里添加你映射的参数,试试看吧~
代码示例:代码片段
最后,希望你们能看的懂我在说什么...(我自己都不知道我在干什么)
本作品采用《CC 协议》,转载必须注明作者和本文链接
          
                    
                    
          
          
                关于 LearnKu
              
                    
                    
                    
 
推荐文章: