netdudes / data-sourcery-bundle
此包已被 废弃 并不再维护。未建议替代包。
Netdudes DataSourceryBundle
dev-master / 1.0.x-dev
2017-06-12 15:44 UTC
Requires
- php: >=7.0
- doctrine/doctrine-bundle: ^1.6
- doctrine/orm: ^2.5
- symfony/symfony: >=2.3
Requires (Dev)
This package is auto-updated.
Last update: 2020-08-11 18:48:35 UTC
README
****** 警告:此项目不再维护!! ******
Netdudes\DataSourceryBundle
DataSourceryBundle 是一个用于处理数据集构建和执行复杂查询的便捷工具,包括支持自然语言查询和处理用户提供的查询参数。
用法 (进行中!)
假设我们有一个由 Doctrine 管理的实体,名为 User
,如下所示
User {
string username
string nameFirst
string nameLast
\DateTime registered
User bestFriend => OtM with another user
User worstEnemy => OtM with another user
}
您可以从构建器中获取库的构建块,即 DataSource
。从现在开始,我们将假设您有一个注册了所需服务的 DI 容器(例如 Symfony)。
$dataSourceBuilder = $container ->get('netdudes_data_sourcery.data_source.factory') ->createBuilder('My\Entities\User');
使用构建器创建 Datasource
很简单
$dataSourceBuilder ->addField('username', 'string', 'username') ->addField('bestFriendUsername' 'string', 'bestFriend.username') ->addField('worstEnemyUsername', 'string', 'worstEnemy.username') ->addField('friendOfMyEnemyUsername', 'string', 'worstEnemy.bestFriend.username') ->addField('registered', 'date', 'registered'); $dataSource = $dataSourceBuilder->build();
或者,您可以从配置类中生成数据源,这与构建 Symfony 表单的方式非常相似。
class MyNiceDataSourceConfig implements DataSourceConfigurationInterface { public function getEntityClass() { return 'My\Entities\User'; } public function buildDataSource(DataSourceBuilderInterface $builder) { $builder ->addField('username', 'string', 'username') ->addField('bestFriendUsername', 'string', 'bestFriend.username') ->addField('worstEnemyUsername', 'string', 'worstEnemy.username') ->addField('friendOfMyEnemyUsername', 'string', 'worstEnemy.bestFriend.username') ->addField('registered', 'date', 'registered'); } } $dataSource = $container ->get('netdudes_data_sourcery.data_source.factory') ->createFromConfiguration(new MyNiceDataSourceConfig());
为了查询数据源,您必须有一个 Query
对象。手动创建一个很简单
$query = new Query(); $query->setSelect(['username', 'bestFriendUsername', 'worstEnemyUsername', 'friendOfMyEnemyUsername', 'registered']); $filter = new Filter( [ new FilterCondition('username', FilterCondition::METHOD_STRING_EQ, 'admin') ] ); $query->setFilter($filter);
或者您可以使用系统内置的 UQL 解析器
$uqlInterpreter = $container->get('netdudes_data_sourcery.uql.interpreter.factory')->create($dataSource); $filter = $uqlInterpreter->generateFilters('username != "admin"'); $query->setFilter($filter);
最后,您可以从数据源获取数据
$data = $dataSource->getData($query); dump($data);
给出
array:1 [ 0 => array:5 [ "username" => "admin" "bestFriendUsername" => "Max" "worstEnemyUsername" => "John" "friendOfMyEnemyUsername" => "Max" "registered" => DateTime {#124 +"date": "2014-02-01 00:00:00.000000" +"timezone_type": 3 +"timezone": "Europe/Berlin" } ] ]