bjnstnkvc / builder-make-command
生成Eloquent Builder类,以增强查询构建和模型作用域管理。
1.0.4
2024-09-24 17:04 UTC
Requires
- illuminate/console: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/database: ^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ^7.0|^8.0|^9.0|^10.0|^11.0
Requires (Dev)
- orchestra/testbench: ^7.0|^8.0|^9.0|^10.0|^11.0
- phpunit/phpunit: ^7.0|^8.0|^9.0|^10.0|^11.0
This package is auto-updated.
Last update: 2024-09-24 17:07:47 UTC
README
生成Eloquent Builder类,以增强查询构建和模型作用域管理。
特性
- 为
where
、whereNot
、whereIn
、whereNotIn
、orWhere
、orWhereNot
、orWhereIn
和orWhereNotIn
提供动态查询方法。 - 简化了复杂查询的构建,方法链可读。
- 自动处理Laravel Query Builder原生不支持的方法调用,将其转换为适当的查询条件。
安装与设置
您可以通过composer安装此包
composer require bjnstnkvc/builder-make-command
该包将自动注册其服务提供者。
如果您想更改包默认值,可以通过发布配置
php artisan vendor:publish --provider="Bjnstnkvc\BuilderMakeCommand\BuilderMakeCommandServiceProvider" --tag=make-builder-config
或占位符
php artisan vendor:publish --provider="Bjnstnkvc\BuilderMakeCommand\BuilderMakeCommandServiceProvider" --tag=make-builder-stubs
使用
安装包后,您可以通过CLI运行它,就像运行其他CLI命令一样。
php artisan make:builder UserBuilder
默认情况下,该命令将尝试从构建器的名称中推断模型名称(例如,UserBuilder
将尝试查找User
模型)。
此外,您还可以将模型名称作为第二个参数传递。
php artisan make:builder UserBuilder User
如果Builder已存在,您可以传递可选的--force
参数,这将覆盖现有类。
php artisan make:builder UserBuilder User --force
注意:通过强制Builder命令,您将覆盖Builder中添加的所有自定义方法,因此请谨慎操作。
如果您简单地调用命令而不带任何参数,Laravel将提示您输入。
php artisan make:builder
What should the builder be named? > UserBuilder
What is the model name? [User] >
Overwrite existing file? (yes/no) [no] >
模型名称已从构建器名称中派生并设置为默认值。按回车键确认或输入模型名称。
如果文件已存在,您将被告知是否要覆盖现有文件。
运行命令后,Builder类将创建在app\Models\Builders
文件夹中。
为了在模型中使用它,我们将利用Laravel newEloquentBuilder方法,将以下内容添加到您为构建器生成的模型中
use App\Models\Builders\UserBuilder; /** * Create a new Eloquent query builder for the model * * @param $query * * @return UserBuilder */ public function newEloquentBuilder($query): UserBuilder { return new UserBuilder($query); }
添加后,将为每个模型列添加动态的where子句作为Eloquent方法。
User::whereId(?string $operator = null, ?string $value = null); User::whereIdNot(?string $operator = null, ?string $value = null); User::whereIdIn(array $values); User::whereIdNotIn(array $values); User::whereIdLike(string $value, bool $caseSensitive = false); User::whereIdLike(string $value, bool $caseSensitive = false); User::whereIdNotLike(string $value, bool $caseSensitive = false); User::whereIdNotLike(string $value, bool $caseSensitive = false); User::orWhereId(?string $operator = null, ?string $value = null); User::orWhereIdNot(?string $operator = null, ?string $value = null); User::orWhereIdIn(array $values); User::orWhereIdNotIn(array $values); User::orWhereIdLike(string $value, bool $caseSensitive = false); User::orWhereIdLike(string $value, bool $caseSensitive = false); User::orWhereIdNotLike(string $value, bool $caseSensitive = false); User::orWhereIdNotLike(string $value, bool $caseSensitive = false); // Methods for other database columns.
当然,这些方法可以链式使用
User::whereId(1) ->orWhereNameNot('John') ->first();
User::whereId('>', 1) ->orWhereEmail('email@example.com') ->first();
如果您需要在括号内分组多个“where”子句以实现查询所需的逻辑分组,可以这样做
User::whereName('John') ->where(function (UserBuilder $query) { $query->whereEmail('email@example.com') ->orWhereTitle('Admin'); }) ->first();
如果您想从您首选的代码编辑器中获取智能提示,您需要将以下文档注释添加到模型中
use App\Models\Builders\UserBuilder; /** * @method static UserBuilder query() Begin querying the model. * * @mixin UserBuilder */ class User extends Authenticatable { // }