thalles/repositories-commands

用于创建仓库的 Artisan 命令

v1.0.4 2020-08-20 13:01 UTC

This package is auto-updated.

Last update: 2024-09-20 21:47:39 UTC


README

用于创建仓库的 Artisan 命令

此包提供了一种快速设置和创建仓库的方法,使用工作单元模式。

  1. 要求
  2. 安装
  3. 配置
  4. 使用
  5. 默认仓库方法
  6. 工作单元方法

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 的方法。

  1. 返回具有定义 id 的项目。
/**
 * @param integer $id
 * @return stdClass|null
 */
function getById(int $id) : ?stdClass
  1. 返回数据库中的所有行。
/**
 * @return Collection
 */
function all() : Collection;
  1. 向数据库添加新项目。
/**
 * @param array $data
 * @return stdClass|null
 */
function add(array $data) : ?stdClass;
  1. 在数据库中更新项目。
/**
 * @param integer $id
 * @param array $data
 * @return stdClass|null
 */
function update(int $id, array $data) : ?stdClass;
  1. 从数据库中删除项目。
/**
 * @param integer $id
 * @return boolean
 */
function delete(int $id) : bool;
  1. 返回数据库中项目的总数。
/**
 * @return integer
 */
function count() : int;
  1. 格式化模型数据。
/**
 * @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. 工作单元方法

  1. 开始数据库事务。
/**
 * @return void
 */
function beginTransaction();
  1. 提交事务更改。
/**
 * @return void
 */
function commit();
  1. 回滚事务更改。
/**
 * @return void
 */
function rollback();