guosheng1987/laravel-repository-query

此包支持将名为`$filters`的参数绑定到您的URL上。之后,您的Bulider实例可以将其绑定到`Where`条件中

v0.1.2 2017-02-10 03:40 UTC

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模型中的usernamegender字段进行筛选。你知道我现在在做什么。享受吧!