imunew/laravel-database-queries

0.3 2021-01-16 12:19 UTC

This package is auto-updated.

Last update: 2024-09-16 20:40:26 UTC


README

CircleCI
此包提供了抽象数据库查询类、链式类以及 make:database-query 命令。

抽象数据库查询类

抽象 Database Query 类具有以下特性。

  • 将查询函数委派给 Eloquent 模型(查询构建器)
  • 声明(限制)要使用的 Eloquent 模型
  • 在构造函数中设置查询参数
namespace App\Database\Queries\User;

use App\Models\User;
use Imunew\Laravel\Database\Queries\Query;
use RuntimeException;

/**
 * Class SameName
 * @package App\Database\Queries\User
 *
 * @mixin User
 */
class SameName extends Query
{
    /**
     * SameName constructor.
     * @param array $parameters
     * @param array $with
     */
    public function __construct(array $parameters, array $with = [])
    {
        parent::__construct(User::class, $parameters, $with);
    }
    
    /**
     * {@inheritdoc}
     */
    protected function validateParameters(array $parameters, ?string &$errorMessage)
    {
        if (!array_key_exists('name', $parameters)) {
            $errorMessage = 'The parameter \'name\' must not be empty.';
            return false;
        }
        return true;
    }

    /**
     * {@inheritdoc}
     */
    protected function buildQuery(array $parameters)
    {
        $this->whereName($parameters['name']);
        return $this;
    }
}
use App\Database\Queries\User\SameName;

function findByName(string $name) {
    $query = new SameName(['name' => $name]);
    return $query->build()->get();
}

链式类

链式类具有以下特性。

  • 可以组合多个查询类(指定相同的模型类)并一次性构建
use App\Database\Queries\User\SameName;
use App\Database\Queries\User\SameEmail;
use Imunew\Laravel\Database\Queries\Chain;

function firstByNameAndEmail(string $name, string $email) {
    $chain = Chain::all([
        new SameName(['name' => $name]), 
        new SameEmail(['email' => $email])
    ]);
    return $chain->build()->first();
}

make:database-query 命令

可以通过以下命令执行来创建查询。

$ php artisan make:database-query {name} --model={model}