public findBySearchTermOrTags ( string $searchTerm, array $tags = [], |
||
$searchTerm | string | |
$tags | array | |
$assetCollection | ||
return | Neos\Flow\Persistence\QueryResultInterface |
public function findBySearchTermOrTags($searchTerm, array $tags = array(), AssetCollection $assetCollection = null)
{
$query = $this->createQuery();
$constraints = array($query->like('title', '%' . $searchTerm . '%'), $query->like('resource.filename', '%' . $searchTerm . '%'), $query->like('caption', '%' . $searchTerm . '%'));
foreach ($tags as $tag) {
$constraints[] = $query->contains('tags', $tag);
}
$query->matching($query->logicalOr($constraints));
$this->addImageVariantFilterClause($query);
$this->addAssetCollectionToQueryConstraints($query, $assetCollection);
return $query->execute();
}
/** * @test */ public function findBySearchTermAndTagsReturnsFilteredResult() { $tag = new Tag('home'); $this->tagRepository->add($tag); $resource1 = $this->resourceManager->importResource(__DIR__ . '/../../Fixtures/Resources/license.txt'); $resource2 = $this->resourceManager->importResource(__DIR__ . '/../../Fixtures/Resources/417px-Mihaly_Csikszentmihalyi.jpg'); $asset1 = new Asset($resource1); $asset1->setTitle('asset for homepage'); $asset2 = new Asset($resource2); $asset2->setTitle('just another asset'); $asset2->addTag($tag); $this->assetRepository->add($asset1); $this->assetRepository->add($asset2); $this->persistenceManager->persistAll(); $this->persistenceManager->clearState(); $this->assertCount(2, $this->assetRepository->findBySearchTermOrTags('home', array($tag))); $this->assertCount(2, $this->assetRepository->findBySearchTermOrTags('homepage', array($tag))); $this->assertCount(1, $this->assetRepository->findBySearchTermOrTags('baz', array($tag))); // This is necessary to initialize all resource instances before the tables are deleted foreach ($this->assetRepository->findAll() as $asset) { $asset->getResource()->getSha1(); } }