guosheng1987 / laravel-repository-query
此包支持将名为`$filters`的参数绑定到您的URL上。之后,您的Bulider实例可以将其绑定到`Where`条件中
Requires
- php: >=5.5.9
- illuminate/database: ~5.1
- illuminate/support: ~5.1
Requires (Dev)
- mockery/mockery: ^0.9.4
- phpunit/phpunit: ^4.8
This package is not auto-updated.
Last update: 2024-09-29 00:59:03 UTC
README
此包支持Laravel的Repository模式。我们在GET URL中创建了一个名为'filters'的参数。查询构建器实例可以将其作为where条件接受,因此我们不需要在各个模块中编写它。
要求
- Laravel 5.3(未来将添加较低版本)
安装
从您的终端运行以下命令
composer require "guosheng1987/laravel-repository-query:0.1.*"
或将此添加到composer.json文件中的require部分
"laravel-repository-query/repositories": "0.1.*"
最后一个命令
composer update
示例
一个简单的示例可以帮助我们理解这个库,假设我们开始设计一个API,该API显示了属于不同企业且包含多个部门和职位的用户。这种关系是:企业有一些部门,部门有一些职位,用户属于其中一个,所以我们在这里创建了四个模型 '用户','部门','职位','企业'
<?php
namespace App\Models;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Hash;
class User extends Authenticatable
{
use Notifiable;
protected $guarded = ['id'];
/**
* The attributes that are mass assignable.
*
* @var array
*/
//protected $fillable = [
// 'username', 'password', 'realname', 'phone', 'visit', 'lasttime'
//];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
/**
* Using Hash to encrypt password when User model saved
*
* @param string $value raw password
* @return void
*/
public function setPasswordAttribute($value)
{
$this->attributes['password'] = Hash::needsRehash($value) ? Hash::make($value) : $value;
}
}
根据Laravel文档填写其他模型在我们的代码中。这里我省略了它们。
在routes文件夹中,我们找到web.php并在其中编写一个简单的Resource路由。
Route::resource('user', 'UserController');
我认为Repository是一个交互式数据层,有助于我们隔离模型和控制器,因此在这里我们在UserController中编写了一个名为'getUserPaginate'的方法。在Laravel文档中,他们这样做。
<?php
namespace App\Http\Controllers;
use App\User;
use App\Repositories\UserRepository;
use App\Http\Controllers\Controller;
class UserController extends Controller
{
protected $users;
public function __construct(UserRepository $users)
{
$this->users = $users;
}
public function index()
{
$user = $this->users->getUserPaginate();
$result = array('msg' => 'success', 'result' => $users->toArray());;
return response()->json($result);
}
}
我们的UserRepository是什么?别担心,它在这里显示。
<?php
namespace App\Repositories;
use App\User;
use RepositoryQuery\Repository;
class UserRepository extends Repository
{
public $query;
public function getUserPaginate()
{
$builder = (new User)->newQuery()
->join('departments as d','users.department_id','=','d.id','LEFT')
->join('positions','users.position_id','=','positions.id','LEFT')
->join('enterprise','users.enterprise_id','=','enterprise.id','LEFT')
->select('users.*');
$user = $this->getPaginate($builder);
return $user;
}
}
之后,让我们看看我们的URL http://yoursite.dev/user?&filters[username][like]=Al&filters[gender][equal]=1&order[username]=asc。现在用户分页结果已根据User模型中的username和gender字段进行筛选。你知道我现在在做什么。享受吧!