imunew / laravel-database-queries
0.3
2021-01-16 12:19 UTC
Requires
- php: ^7.0|^8.0
- ext-json: *
- illuminate/support: ^5.5|^6|^7|^8
Requires (Dev)
- laravel/legacy-factories: ^1.0.4
- orchestra/testbench: ^5.1|^6.0
This package is auto-updated.
Last update: 2024-09-16 20:40:26 UTC
README
此包提供了抽象数据库查询类、链式类以及 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}