testmonitor / eloquent-calculated-columns
一个用于在Eloquent模型中使用SQL添加计算列的Laravel扩展包,以实现更高效的查询。
dev-main
2024-07-10 08:50 UTC
Requires
- php: ^8.2
- illuminate/config: ^11.0
- illuminate/database: ^11.0
- illuminate/support: ^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.7
- orchestra/testbench: ^9.0
- phpunit/phpunit: ^11.0
- squizlabs/php_codesniffer: ^3.6
This package is auto-updated.
Last update: 2024-09-10 09:11:46 UTC
README
一个在从Eloquent模型检索数据时添加计算列的Laravel扩展包。此包允许您使用SQL定义这些列,从而比访问器实现更高效的查询。
该包深受Spatie的 Query Builder 启发,可以与此包一起使用。
目录
安装
可以通过Composer安装此包
$ composer require testmonitor/eloquent-calculated-columns
接下来,发布配置文件
$ php artisan vendor:publish --tag=eloquent-calculated-columns
配置文件允许您更改所需的HTTP参数名称。
用法
要使用计算列,您需要
- 在您的模型中使用
TestMonitor\CalculatedColumns\HasCalculatedColumns特性。 - 在您的模型中定义可用的计算列。
将计算列特性添加到您希望添加计算列的模型中
use Illuminate\Database\Query\Builder; use Illuminate\Database\Eloquent\Model; use TestMonitor\CalculatedColumns\HasCalculatedColumns; class User extends Model { use HasCalculatedColumns; public function calculatedColumns(): array { return [ 'total_price' => function (Builder $query) { $query->select(DB::raw("SUM(order_items.price) AS total_price")) ->from('order_items') ->whereColumn('order_items.order_id', 'orders.id'); }, ]; } }
接下来,在您的查询中使用计算列
use App\Models\Order; $orders = Order::query() ->withCalculatedColumns() ->get(); }
在这个例子中,total_price列通过将所有订单项的价格相加来计算订单的总价。
请求的列将自动从HTTP请求中导出。您可以在配置文件中修改HTTP查询参数。默认使用名称calculate。
示例
测试
该包包含集成测试。您可以使用PHPUnit运行它们。
$ vendor/bin/phpunit
变更日志
有关更多信息,请参阅 变更日志。
贡献
有关贡献详细信息,请参阅 贡献指南。
鸣谢
许可
MIT许可(MIT)。有关更多信息,请参阅 许可。