jsanhuez/eloquent-data-processing

Eloquent ORM 对 ViewComponents 的支持

该包的官方仓库似乎已消失,因此该包已被冻结。

v1.2.4 2017-02-14 16:00 UTC

This package is not auto-updated.

Last update: 2021-03-11 01:42:19 UTC


README

Release Build Status Scrutinizer Code Quality Code Coverage

Eloquent ORM 对 ViewComponents 的支持

目录

需求

  • PHP 5.5+ (hhvm & php7 支持)

安装

推荐通过 Composer 安装组件。

运行以下命令

composer require jsanhuez/eloquent-data-processing dev-master

使用

创建数据提供者

EloquentDataProvider 支持 3 种数据源类型

  • Illuminate\Database\Eloquent\Builder 实例(从模型创建的数据库查询构建器)
  • Illuminate\Database\Query\Builder 实例(标准数据库查询构建器,不了解模型)
  • Eloquent 模型的类名

使用 Eloquent 模型类名作为数据源

use MyApp\UserModel;
use ViewComponents\Eloquent\EloquentDataProvider;
$provider = new EloquentDataProvider(UserModel::class);

如果您使用 Eloquent 模型类名作为数据源,唯一修改数据库查询的方式是指定数据提供者操作

use ViewComponents\ViewComponents\Data\Operation\FilterOperation;

$provider->operations()->add(
    new FilterOperation('role', FilterOperation::OPERATOR_EQ, 'Manager')
);

使用 Illuminate\Database\Eloquent\Builder 作为数据源

use ViewComponents\Eloquent\EloquentDataProvider;

$provider = new EloquentDataProvider((new MyApp\UserModel)->newQuery());

在创建 EloquentDataProvider 之前指定查询部分是可能的,但请注意,查询的一些部分可能会被数据提供者操作更改。

use ViewComponents\Eloquent\EloquentDataProvider;

$query = MyApp\UserModel
            ::where('role', '=', 'Manager')
            ->where('company', '=', 'Facebook')
            ->orderBy('id');

$provider = new EloquentDataProvider($query);

使用 Illuminate\Database\Query\Builder 作为数据源

即使不处理 Eloquent 模型,也可以使用 EloquentDataProvider。

use DB;
use ViewComponents\Eloquent\EloquentDataProvider;

$provider = new EloquentDataProvider(
    DB::table('users')->where('name', '=', 'David')
);

数据提供者操作

Eloquent 数据提供者在有操作时修改数据库查询。

使用 operations() 方法访问操作集合。

有关集合的文档可以在 这里 找到。

添加操作的示例

$provider
    ->operations()
    ->add(new SortOperation('id', SortOperation::ASC));

此外,操作也可以在创建数据提供者时指定

use MyApp\UserModel;
use ViewComponents\Eloquent\EloquentDataProvider;
use ViewComponents\ViewComponents\Data\Operation\FilterOperation;

$provider = new EloquentDataProvider(
    UserModel::class
    [
        new FilterOperation('role', FilterOperation::OPERATOR_EQ, 'Manager')
        new SortOperation('id', SortOperation::DESC),
    ]
);

提取数据

数据提供者实现了 IteratorAggregate 接口,因此您可以像数组一样迭代它

use MyApp\UserModel;
use ViewComponents\Eloquent\EloquentDataProvider;

$provider = new EloquentDataProvider(UserModel::class);
foreach ($provider as $user) {
   var_dump($user); // instance of UserModel
}

数据提供者在调用 getIterator() 方法或数据尚未加载时开始迭代时执行数据库查询,即调用 getIterator() 两次不会产生两个数据库查询。但是更改操作集合会导致缓存重置

use MyApp\UserModel;
use ViewComponents\Eloquent\EloquentDataProvider;
use ViewComponents\ViewComponents\Data\Operation\FilterOperation;

$provider = new EloquentDataProvider(UserModel::class);
// databse query will be executed 
$provider->getIterator();

// databse query will not be executed again, iterating over same data 
$provider->getIterator();

$provider->operations->add(
  new FilterOperation('id', FilterOperation::OPERATOR_LTE, 5)
)
// databse query will be executed again
$provider->getIterator();

贡献

请参阅贡献指南行为准则以获取详细信息。

测试

此软件包包含单元测试(PHPUnit)。

要本地运行测试,您必须将此软件包作为独立项目安装,并包含开发依赖项。

composer create-project view-components/eloquent-data-processing

运行测试的命令

composer test

安全

如果您发现任何安全相关的问题,请通过电子邮件mail@vitaliy.in而不是使用问题跟踪器进行报告。

许可

© 2015 — 2016 Vitalii Stepanenko

许可协议为MIT许可证。

有关更多信息,请参阅许可文件