xabou/query

Laravel 5 查询对象

v0.7.0 2020-01-10 22:24 UTC

This package is auto-updated.

Last update: 2024-08-29 05:22:12 UTC


README

所有美好的事物都有终结。感谢大家使用此包 :)

Laravel 查询

Query 是一个为 Laravel 应用提供查询对象的包。

安装

1: 通过 composer 需求

在命令行运行

composer require xabou/query

或者,您可以将以下内容放入 composer.json 文件中

{
    "require": {
        "xabou/query": "^0.5.0"
    }
}

2: 注册服务提供者

打开 config/app.php 并将以下内容添加到 providers 数组中

Xabou\Query\QueryServiceProvider::class

用法

创建一个查询

安装此包后,将有一个新的 artisan 命令可用。

php artisan make:query PopularUsersQuery

如果不存在,将在您的应用中创建一个 'Queries' 目录。

声明查询体

在 body 方法中您可以声明您的查询

public static function body()
{
    return User::select(['user.username', 'user.id', 'user.verified', 'popularity_user.score'])
                 ->join('popularity_user', 'users.id', '=', 'popularity_user.user_id')
                 ->where('user.verified', 1)
                 ->with('avatar')
                 ->orderBy('popularity_user.score', 'DESC')
                 ->orderBy('user.username', 'ASC');
}

获取结果

这是您应该声明查询逻辑的地方。此方法返回 Eloquent 数据库构建器实例或执行的查询。

获取

这是 body 方法的包装器。当 body 返回 Eloquent 数据库构建器实例时,此方法委托给 Builder 的 get 方法。

1: 委托给 Eloquent 数据库构建器

您可以通过返回实例来调用 Eloquent 数据库构建器中定义的任何方法,如上面的示例。

// Dynamic static method calls
PopularUsersQuery::first()

// or
PopularUsersQuery::get()

// Dynamic method calls
(new PopularUsersQuery())->get()

2: 执行查询

在 body 方法中,您也可以执行您的查询。

public static function body()
{
    return User::select(['user.username', 'user.id', 'user.verified', 'popularity_user.score'])
                 ->join('popularity_user', 'users.id', '=', 'popularity_user.user_id')
                 ->where('user.verified', 1)
                 ->with('avatar')
                 ->orderBy('popularity_user.score', 'DESC')
                 ->paginate();
}

然后只需在 Query 上调用 body 或 get 方法。

PopularUsersQuery::body()

//or

PopularUsersQuery::get()

注意:在此情况下,get 方法作为 body 方法的别名。它不会委托给 Eloquent 数据库构建器。

3: 链接查询

通过返回 body 的内容,您可以在 Eloquent 数据库构建器上继续链接方法。

PopularUsersQuery::body()->where('age', '>', 25)->get();

传递参数

您可以通过 body 或 get 方法传递任意多的参数。

$age = 25;
$verified = 1 
PopularUsersQuery::get($age, $verified);

public static function body($age, $verified)
{
    return User::where('age', '>', $age)
                 ->where('verified', $verified);
}