alm /querymap

受到Django的QuerySet启发的Doctrine查询机制

v1.1.0 2016-06-15 14:05 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:36:39 UTC


README

提供一个简化的接口,用于使用Doctrine构建查询。

示例用法

/** @var \QueryMap\Bundle\QueryMapBundle\Service\QueryMapFactoryService $qmFactory */
$qmFactory = $this->container->get('querymap.factory');

$qm = $qmFactory->create(Team::class, 't');

/** @var $query \Doctrine\ORM\QueryBuilder */
$query = $qm->query([
    'points__gt' => '6',
    'continent' => 'Europe'
]);

echo $query->getDQL();
//SELECT t FROM FootballBundle\Entity\Team t
//WHERE (t.points >= 6) AND (t.continent = 'Europe')

安装

编辑你的composer.json,将包包含到你的项目中,并运行composer update alm/querymap

require {
    ...
    "alm/querymap": "v1.1.*"
    ...
}

在AppKernel.php中的$bundles数组中包含QueryMap包,并提供给其构造函数。

$bundles = [
    ...
    new QueryMap\Bundle\QueryMapBundle\QueryMapBundle($this),
    ...
]

接下来,在你的config.yml文件中,指定映射yml文件的路径 - 如果你使用此功能 - 如下所示

query_map:
    paths:
        - '@FooBundle/Resources/querymap'
        - '@BarBundle/Resources/querymap'

对于你想要使用QueryMap过滤的实体,在实体头部添加@QM\Map注解。

use Doctrine\ORM\Mapping as ORM;
use QueryMap\Contrib\Annotation\DoctrineAnnotationMapping as QM;

/**
 * @ORM\Entity(repositoryClass=\MyBundle\Repository\TeamRepository)
 * ...
 * @QM\Map
 */

现在,你可以根据在该实体中定义的@ORM\Column、@ORM\ManyToOne或@ORM\OneToOne的所有属性进行过滤。