问题是$this->_getContainer()->get('sylius.repository.product')->findOneBy(array('my_attribute' => '1234'))
抛出异常:
[语义错误]第0行,第209页'my_attribute =:my_attribute'附近:错误:类Sylius \ Component \ Product \ Model \ Product没有名为my_attribute的字段或关联
这是什么原因? 我只使用干净的Sylius SyliusProductBundle,SyliusAttributeBundle和其他一些必需的。 保存具有不同属性的产品就像魅力一样,但尝试按任何非标准属性加载产品会导致此异常。 我没有扩展任何模型,我没有通过添加任何新属性来配置任何XML或YML。从EAV我希望即时创建一个必需的属性(哪个工作),而不必定义任何固定的属性。 例如。我想要葡萄酒(具有葡萄,年份)和汽车(带引擎,长度和类型)。
但也许我错了?怎么解决?你能提供一些例子吗?文档中的那个不能正常工作。
$this->_getContainer()->get('sylius.repository.product')->findAll()
返回我数据库中的所有产品,但没有保存的属性或值。但是在表sylius_product,sylius_product_attribute,sylius_product_attribute_value中,一切看起来都没问题。
任何提示都表示赞赏。甚至是愚蠢的 - 我对Symfony 2来说是全新的。
答案 0 :(得分:1)
您需要在产品库中定义自定义方法:
public function findByAttribute($attributeName, $value)
{
return $this->getQueryBuilder()
->join($this->getAlias() . '.attributes', 'av')
->join('av.attribute', 'a')
->where('av.value = :value')
->andWhere('a.name = :attributeName')
->setParameter('attributeName', $attributeName)
->setParameter('value', $value)
->getQuery()
->getResult();
}