thalles / repositories-commands
用于创建仓库的 Artisan 命令
v1.0.4
2020-08-20 13:01 UTC
Requires
- php: >=7.1.3
- laravel/framework: >=5.8
README
用于创建仓库的 Artisan 命令
此包提供了一种快速设置和创建仓库的方法,使用工作单元模式。
1. 要求
- PHP >= 7.1.3
- laravel/framework ^5.8
2. 安装
使用 composer 需求包
composer require thalles/repositories-commands
3. 配置
运行以下命令以创建此仓库的主仓库和接口。
php artisan repository:setup
请注意终端输出。您需要复制输出并将其粘贴到 AppServiceProvider 的 register 方法中。
4. 使用
要创建新的仓库,请使用以下命令。
php artisan repository:new RepositoryName ModelName
第一个参数是仓库名称。第二个是要使用的模型。如果您的模型不在默认路径上,您可以提供文件路径。
示例
php artisan repository:new UserRepository Models/User
将仓库属性添加到 UnitOfWork 类中。
<?php
namespace App\Repositories;
use App\Interfaces\UnitOfWorkInterface;
use Illuminate\Support\Facades\DB;
class UnitOfWork implements UnitOfWorkInterface
{
/**
* UserRepository instance
*
* @return void
*/
private $UserRepository;
/**
* ProductRepository instance
*
* @return void
*/
private $ProductRepository;
...
}
在代码实现中使用 UnitOfWorkInterface。
<?php
namespace App\Http\Controllers;
use App\Interfaces\UnitOfWorkInterface;
class UserController extends Controller
{
/**
* UnitOfWork instance
*
* @var App\Interfaces\UnitOfWorkInterface
*/
private $uow;
/**
* Constructor method
*
* @param App\Interfaces\UnitOfWorkInterface $uow
*/
public function __construct(UnitOfWorkInterface $uow)
{
$this->uow = $uow;
}
public function index()
{
try {
$this->uow->beginTransaction();
$user = $this->uow->UserRepository->add([
'name' => 'User Name',
'email' => 'email@email.com',
'password' => bcrypt('secret')
]);
if ($user) {
$this->uow->commit();
return $this->uow->UserRepository->all();
}
throw new Exception();
} catch (Exception $e) {
$this->uow->rollback();
return back()->with('error', 'Internal Server Error.');
}
}
}
5. 默认仓库方法
此包提供了一些可用于 CRUD 的方法。
- 返回具有定义 id 的项目。
/**
* @param integer $id
* @return stdClass|null
*/
function getById(int $id) : ?stdClass
- 返回数据库中的所有行。
/**
* @return Collection
*/
function all() : Collection;
- 向数据库添加新项目。
/**
* @param array $data
* @return stdClass|null
*/
function add(array $data) : ?stdClass;
- 在数据库中更新项目。
/**
* @param integer $id
* @param array $data
* @return stdClass|null
*/
function update(int $id, array $data) : ?stdClass;
- 从数据库中删除项目。
/**
* @param integer $id
* @return boolean
*/
function delete(int $id) : bool;
- 返回数据库中项目的总数。
/**
* @return integer
*/
function count() : int;
- 格式化模型数据。
/**
* @param Model $model
* @return array
*/
function dataFormat(Model $model) : array;
如果您需要为您的仓库创建其他方法,首先在接口中注册方法,然后在仓库中实现该方法。
- 接口。
<?php
namespace App\Interfaces;
use Illuminate\Support\Collection;
interface UserRepositoryInterface extends RepositoryInterface
{
/**
* Make the search query
*
* @param string $search
* @param int $pagination
*
* @return Collection
*/
function search(string $search, int $id_user_auth) : Collection;
}
- 仓库。
<?php
namespace App\Repositories;
use App\Models\User;
use Illuminate\Support\Collection;
use App\Interfaces\UserRepositoryInterface;
class UserRepository extends Repository implements UserRepositoryInterface
{
/**
* Constructor method
*/
public function __construct()
{
parent::__construct(new User());
}
/**
* Make the search query
*
* @param string $search
* @param int $pagination
*
* @return Collection
*/
public function search(string $search, int $id_user_auth) : Collection
{
$users = $this->model
->where('id', '<>', $id_user_auth)
->where('name', 'LIKE', "%{$search}%")
->orWhere('email', 'LIKE', "%{$search}%")
->orderBy('name', 'ASC')
->get()
->toArray();
$users = $this->arrayToStdClass($users);
$users = new Collection($users);
return $users;
}
}
6. 工作单元方法
- 开始数据库事务。
/**
* @return void
*/
function beginTransaction();
- 提交事务更改。
/**
* @return void
*/
function commit();
- 回滚事务更改。
/**
* @return void
*/
function rollback();