ferrisbane / eloquent-companion
一个包含扩展Laravel Eloquent ORM实用性的辅助函数包的典范
Requires
- php: >=5.4.0
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 install
或 composer 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个以上绑定的复杂查询非常有用。