testmonitor/eloquent-calculated-columns

一个用于在Eloquent模型中使用SQL添加计算列的Laravel扩展包,以实现更高效的查询。

dev-main 2024-07-10 08:50 UTC

This package is auto-updated.

Last update: 2024-09-10 09:11:46 UTC


README

Latest Stable Version codecov StyleCI License

一个在从Eloquent模型检索数据时添加计算列的Laravel扩展包。此包允许您使用SQL定义这些列,从而比访问器实现更高效的查询。

该包深受Spatie的 Query Builder 启发,可以与此包一起使用。

目录

安装

可以通过Composer安装此包

$ composer require testmonitor/eloquent-calculated-columns

接下来,发布配置文件

$ php artisan vendor:publish --tag=eloquent-calculated-columns

配置文件允许您更改所需的HTTP参数名称。

用法

要使用计算列,您需要

  1. 在您的模型中使用 TestMonitor\CalculatedColumns\HasCalculatedColumns 特性。
  2. 在您的模型中定义可用的计算列。

将计算列特性添加到您希望添加计算列的模型中

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)。有关更多信息,请参阅 许可