Sylius,通过slug搜索产品不起作用

时间:2017-12-08 09:14:50

标签: symfony sylius

我试图通过slug过滤产品,使用:

$this->get('sylius.repository.product')->findOneBy(array('slug' => $slug));

我尝试过使用findBy和findOneBySlug,但它总是说产品没有" slug"属性:

Unrecognized field: slug

Entity 'Sylius\Component\Core\Model\Product' has no field 'slug'. You can therefore not call 'findOneBySlug' on the entities' repository

但他们网站上的文档说它应该有效: http://docs.sylius.org/en/latest/components_and_bundles/bundles/SyliusProductBundle/product.html

$product = $repository->findOneBy(array('slug' => 'my-super-product')); // Get one product by defined criteria.

1 个答案:

答案 0 :(得分:3)

我认为这不起作用,因为slug可用于产品的翻译。存储库中有一些可能对您有帮助的默认方法,例如:findOneByChannelAndSlugfindByName

或者,您可以在扩展产品存储库时自己构建它:

/**
 * @param string $name
 * @param string $locale
 * @return array
 */
public function findBySlug(string $slug, string $locale): ?ProductInterface
{
    return $this->createQueryBuilder('o')
        ->innerJoin('o.translations', 'translation', 'WITH', 'translation.locale = :locale')
        ->andWhere('translation.slug = :slug')
        ->setParameter('slug', $slug)
        ->setParameter('locale', $locale)
        ->getQuery()
        ->getOneOrNullResult()
    ;
}