netdudes/data-sourcery-bundle
Composer 安装命令:
composer require netdudes/data-sourcery-bundle
包简介
Netdudes DataSourceryBundle
关键字:
README 文档
README
****** WARNING: THIS PROJECT IS NO LONGER MAINTAINED!! ******
Netdudes\DataSourceryBundle
DataSourceryBundle is a neat tool to handle building and performing complex queries on data sets, including support for natural-language queries and safe handling of user provided query parameters.
Usage (work in progress!)
Assume we have one entity in our system managed by Doctrine, called User, that looks like this:
User {
string username
string nameFirst
string nameLast
\DateTime registered
User bestFriend => OtM with another user
User worstEnemy => OtM with another user
}
You can get the building block of the library, the DataSource, from a builder. From here and now on we will assume you have a DI container (e.g. Symfony) where the needed services are registered.
$dataSourceBuilder = $container ->get('netdudes_data_sourcery.data_source.factory') ->createBuilder('My\Entities\User');
With a builder is easy to create a 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();
Alternatively, a data source can be generated from a configuration class, very similarly to how Symfony Forms are built.
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());
In order to query you data source, you must have a Query object. Creating one manually is easy:
$query = new Query(); $query->setSelect(['username', 'bestFriendUsername', 'worstEnemyUsername', 'friendOfMyEnemyUsername', 'registered']); $filter = new Filter( [ new FilterCondition('username', FilterCondition::METHOD_STRING_EQ, 'admin') ] ); $query->setFilter($filter);
Alternatively you can use the built in parser for the system's language, UQL:
$uqlInterpreter = $container->get('netdudes_data_sourcery.uql.interpreter.factory')->create($dataSource); $filter = $uqlInterpreter->generateFilters('username != "admin"'); $query->setFilter($filter);
Finally, you can get your data from the data source
$data = $dataSource->getData($query); dump($data);
Giving
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" } ] ]
统计信息
- 总下载量: 7.19k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 2
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2015-01-21