Neos\Media\Domain\Repository\AssetRepository::findBySearchTermOrTags PHP Method

findBySearchTermOrTags() public method

Find assets by title or given tags
public findBySearchTermOrTags ( string $searchTerm, array $tags = [], AssetCollection $assetCollection = null ) : Neos\Flow\Persistence\QueryResultInterface
$searchTerm string
$tags array
$assetCollection Neos\Media\Domain\Model\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();
    }

Usage Example

 /**
  * @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();
     }
 }
All Usage Examples Of Neos\Media\Domain\Repository\AssetRepository::findBySearchTermOrTags