$manager->persist($tag1);
- $this->addReference('foo-tag', $tag1);
+ $this->addReference('foo-bar-tag', $tag1);
$tag2 = new Tag();
$tag2->setLabel('bar');
$this->addReference('baz-tag', $tag3);
+ $tag4 = new Tag();
+ $tag4->setLabel('foo');
+
+ $manager->persist($tag4);
+
+ $this->addReference('foo-tag', $tag4);
+
$manager->flush();
}
{
$qb = $this->createQueryBuilder('e')
->leftJoin('e.tags', 't')
- ->where('e.user =:userId')->setParameter('userId', $userId);
+ ->where('e.user = :userId')->setParameter('userId', $userId);
if (null !== $isArchived) {
$qb->andWhere('e.isArchived = :isArchived')->setParameter('isArchived', (bool) $isArchived);
}
if ('' !== $tags) {
- foreach (explode(',', $tags) as $tag) {
- $qb->andWhere('t.label = :label')->setParameter('label', $tag);
+ foreach (explode(',', $tags) as $i => $tag) {
+ $entryAlias = 'e' . $i;
+ $tagAlias = 't' . $i;
+
+ // Complexe queries to ensure multiple tags are associated to an entry
+ // https://stackoverflow.com/a/6638146/569101
+ $qb->andWhere($qb->expr()->in(
+ 'e.id',
+ $this->createQueryBuilder($entryAlias)
+ ->select($entryAlias . '.id')
+ ->leftJoin($entryAlias . '.tags', $tagAlias)
+ ->where($tagAlias . '.label = :label' . $i)
+ ->getDQL()
+ ));
+
+ // bound parameter to the main query builder
+ $qb->setParameter('label' . $i, $tag);
}
}
->innerJoin('e.tags', 't')
->innerJoin('e.user', 'u')
->addSelect('t', 'u')
- ->where('e.user=:userId')->setParameter('userId', $userId)
+ ->where('e.user = :userId')->setParameter('userId', $userId)
;
return $qb->getQuery()->getResult();
{
$qb = $this->createQueryBuilder('e')
->select('count(e)')
- ->where('e.user=:userId')->setParameter('userId', $userId)
+ ->where('e.user = :userId')->setParameter('userId', $userId)
;
return (int) $qb->getQuery()->getSingleScalarResult();
$this->assertSame(1, $content['page']);
$this->assertGreaterThanOrEqual(1, $content['pages']);
+ $this->assertContains('foo', array_column($content['_embedded']['items'][0]['tags'], 'label'), 'Entries tags should have "foo" tag');
+ $this->assertContains('bar', array_column($content['_embedded']['items'][0]['tags'], 'label'), 'Entries tags should have "bar" tag');
+
$this->assertArrayHasKey('_links', $content);
$this->assertArrayHasKey('self', $content['_links']);
$this->assertArrayHasKey('first', $content['_links']);
$this->assertSame($contentInDB->getLanguage(), $content[0]['language']);
$this->assertSame($contentInDB->getReadingtime(), $content[0]['reading_time']);
$this->assertSame($contentInDB->getDomainname(), $content[0]['domain_name']);
- $this->assertSame(['foo bar', 'baz'], $content[0]['tags']);
+ $this->assertContains('baz', $content[0]['tags']);
+ $this->assertContains('foo', $content[0]['tags']);
}
public function testXmlExport()
$em->flush();
$client = $this->getClient();
- $client->request('GET', '/admin/SUPERTOKEN/tags/foo-bar.xml');
+ $client->request('GET', '/admin/SUPERTOKEN/tags/foo.xml');
$this->assertSame(200, $client->getResponse()->getStatusCode());
- $this->validateDom($client->getResponse()->getContent(), 'tag (foo bar)', 'tags/foo-bar');
+ $this->validateDom($client->getResponse()->getContent(), 'tag (foo)', 'tags/foo');
- $client->request('GET', '/admin/SUPERTOKEN/tags/foo-bar.xml?page=3000');
+ $client->request('GET', '/admin/SUPERTOKEN/tags/foo.xml?page=3000');
$this->assertSame(302, $client->getResponse()->getStatusCode());
}
}