bjnstnkvc/builder-make-command

生成Eloquent Builder类,以增强查询构建和模型作用域管理。

1.0.4 2024-09-24 17:04 UTC

This package is auto-updated.

Last update: 2024-09-24 17:07:47 UTC


README

生成Eloquent Builder类,以增强查询构建和模型作用域管理。

特性

  • wherewhereNotwhereInwhereNotInorWhereorWhereNotorWhereInorWhereNotIn提供动态查询方法。
  • 简化了复杂查询的构建,方法链可读。
  • 自动处理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
{
    //
}