我试图通过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.
答案 0 :(得分:3)
我认为这不起作用,因为slug
可用于产品的翻译。存储库中有一些可能对您有帮助的默认方法,例如:findOneByChannelAndSlug
或findByName
。
或者,您可以在扩展产品存储库时自己构建它:
/**
* @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()
;
}