netdudes/data-sourcery-bundle

此包已被 废弃 并不再维护。未建议替代包。

Netdudes DataSourceryBundle

安装数: 7,189

依赖者: 0

建议者: 0

安全性: 0

星标: 2

关注者: 5

分支: 1

开放问题: 2

类型:symfony-bundle

dev-master / 1.0.x-dev 2017-06-12 15:44 UTC

README

****** 警告:此项目不再维护!! ******

Netdudes\DataSourceryBundle

Build Status Code Climate SensioLabsInsight Scrutinizer Code Quality

Latest Stable Version Total Downloads Latest Unstable Version License

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"
    }
  ]
]