view-components / eloquent-data-processing
ViewComponents 的 Eloquent ORM 支持
Requires
- php: ^5.5||^7||^8
- view-components/view-components: ^0.24.2||^0.25||^0.26.6
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-06 23:21:10 UTC
README
ViewComponents 的 Eloquent ORM 支持
目录
需求
- PHP 5.5+ (hhvm & php7 都受支持)
安装
安装此组件的推荐方式是通过 Composer.
运行以下命令
composer require view-components/eloquent-data-processing
用法
创建数据提供者
EloquentDataProvider 支持三种类型的数据源
- 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() 方法或迭代开始时(如果数据尚未加载)执行 DB 查询,即调用 getIterator() 两次不会产生 2 个数据库查询。但是更改操作集合会导致重置缓存
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 许可证授权。
有关更多信息,请参阅 许可证文件。