ferrisbane/eloquent-companion

一个包含扩展Laravel Eloquent ORM实用性的辅助函数包的典范

v0.0.1 2019-08-28 22:35 UTC

This package is auto-updated.

Last update: 2024-09-29 05:09:06 UTC


README

一个包含扩展Laravel Eloquent ORM实用性的辅助函数包的典范

安装

要通过composer安装,您可以在项目文件夹内使用 composer require ferrisbane/eloquent-companion,或者将包包含在您的 composer.json 中。

"ferrisbane/eloquent-companion": "0.1.*"

然后运行 composer installcomposer update 下载包。

要将服务提供者添加到 config/app.php 中的服务提供者列表,以使用Laravel 5。

'providers' => [
    ...

    Ferrisbane\EloquentCompanion\Laravel5ServiceProvider::class

    ...
];

使用

一旦服务提供者被添加到您的项目提供者列表中,辅助函数就可以使用了。

withWhereHas

withWhereHas辅助函数对于您想在模型上运行->whereHas()查询并且还想不重复编写相同的查询来预加载相同的关系非常有用。使用->withWhereHas()可以使您的代码更简洁和DRY!

例如,如果您有一个用户模型,并且只想返回有付费订单的用户,并且还想要预加载付费订单

User::where('active', true)
    ->withWhereHas('orders', function($query) {
        $query->where('paid', true);
    })
    ->get();

相比之下,在标准Eloquent中,您必须写出两次查询,对于较大的查询和查询的变化,这可能会变得很混乱

User::where('active', true)
    ->whereHas('orders', function($query) {
        $query->where('paid', true);
    })
    ->with([
        'orders' => function($query) {
            $query->where('paid', true);
        }
    ])
    ->get();

toQuery

在编写Eloquent查询时,查看它将运行的SQL查询可能很有用。Eloquent提供了一个->toSql()函数来帮助您,但是任何绑定都不会在输出中填充。这里是->toQuery()函数来帮助您!

User::where('email', 'john@example.com')
    ->toQuery();

查看上述查询,标准的->toSql()函数将返回:SELECT * FROM users WHERE email = ?。我们无法直接将输出复制粘贴到我们最喜欢的数据库客户端中。

然而,使用->toQuery()函数可以做到,因为它将输出:SELECT * FROM users where email = 'john@example.com'。这对于调试可能包含10个以上绑定的复杂查询非常有用。