public function testQueryBuilder() { $strategy = new ChildTranslationStrategy($this->dm); $this->dm->setTranslationStrategy('children', $strategy); $this->dm->setLocaleChooserStrategy(new LocaleChooser(array('en' => array('fr'), 'fr' => array('en')), 'en')); // First save some translations $data = array(); $data['topic'] = 'Some interesting subject'; $data['text'] = 'Lorem ipsum...'; $data['settings'] = array('is-active' => 'true', 'url' => 'great-article-in-english.html'); $node = $this->getTestNode(); $node->setProperty('author', 'John Doe'); $node->setProperty('phpcr:class', 'Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle'); $strategy->saveTranslation($data, $node, $this->metadata, 'en'); // Save translation in another language $data['topic'] = 'Un sujet intéressant'; $data['settings'] = array('is-active' => 'true', 'url' => 'super-article-en-francais.html'); $strategy->saveTranslation($data, $node, $this->metadata, 'fr'); $this->dm->flush(); $qb = $this->dm->createQueryBuilder(); $qb->from()->document('Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle', 'a'); $qb->where()->eq()->field('a.topic')->literal('Not Exist')->end(); $res = $qb->getQuery()->execute(); $this->assertCount(0, $res); $qb = $this->dm->createQueryBuilder(); $qb->from()->document('Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle', 'a'); $qb->where()->eq()->field('a.topic')->literal('Un sujet intéressant')->end(); $res = $qb->getQuery()->execute(); $this->assertCount(0, $res); $qb = $this->dm->createQueryBuilder(); $qb->setLocale(false); $qb->from()->document('Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle', 'a'); $qb->where()->eq()->field('a.topic')->literal('Un sujet intéressant')->end(); $res = $qb->getQuery()->execute(); $this->assertCount(0, $res); $qb = $this->dm->createQueryBuilder(); $qb->from()->document('Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle', 'a'); $qb->where()->eq()->field('a.topic')->literal('Some interesting subject')->end(); $res = $qb->getQuery()->execute(); $this->assertCount(1, $res); $qb = $this->dm->createQueryBuilder(); $qb->setLocale('fr'); $qb->from()->document('Doctrine\\Tests\\Models\\Translation\\ChildTranslationArticle', 'a'); $qb->where()->eq()->field('a.topic')->literal('Un sujet intéressant')->end(); $res = $qb->getQuery()->execute(); $this->assertCount(1, $res); }
/** * Create a Query * * @param string $statement the SQL2 statement * @param string $language (see QueryInterface for list of supported types) * @param bool $replaceWithFieldnames if * should be replaced with Fieldnames automatically * @return PHPCR\Query\QueryResultInterface */ public function createQuery($statement, $language, $options = 0) { $cb = $this->dm->createQueryBuilder()->setFromQuery($statement, $language); if ($options & self::QUERY_REPLACE_WITH_FIELDNAMES) { $columns = $cb->getColumns(); if (1 === count($columns)) { $column = reset($columns); if ('*' === $column->getColumnName() && null == $column->getPropertyName()) { $cb->setColumns(array()); foreach ($this->class->getFieldNames() as $name) { $cb->addSelect($name); } } } } $factory = $cb->getQOMFactory(); $comparison = $factory->comparison($factory->propertyValue('phpcr:class'), Constants::JCR_OPERATOR_EQUAL_TO, $factory->literal($this->className)); $cb->andWhere($comparison); return $cb->getQuery(); }
/** * Create a QueryBuilder that is pre-populated for this repositories document * * The returned query builder will be pre-populated with the criteria * required to search for this repositories document class. * * NOTE: When adding criteria to the query builder you should * use ->andWhere(...) as ->where(...) will overwrite * the class criteria. * * @param string $alias name of the alias to use, defaults to 'a' * * @return \Doctrine\ODM\PHPCR\Query\Builder\QueryBuilder */ public function createQueryBuilder($alias) { $qb = $this->dm->createQueryBuilder(); $qb->from($alias)->document($this->className, $alias); return $qb; }
protected function createQb() { $qb = $this->dm->createQueryBuilder(); return $qb; }