我有一个名为$configurations
的集合数组。这个数组匹配我的实体Configuration.php
连接到Product.php
作为ManyToMany
。现在我有另一个名为WorkType.php
的实体,它通过ManyToMany
连接到Configuration.php
。doctrine2 queryBuilder必须仅返回与数组值(ids)匹配的结果:0 /空和/或一个和/或许多id必须返回一个结果
目标是恢复具有当前工作类型的O/Null
或Many
配置的产品。
默认情况下,我有没有配置的产品,但用户可以通过复选框选择工作类型可用的O/Null
或One
或Many
配置。
所以我在ProductRepository.php
创建此的QueryBuilder:
public function getProductByManyConfig($slug, $configurations)
{
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
$queryBuilder->select('p')
->from('MyBundle', 'p')
->join('p.workType', 'wt', 'WITH', 'wt.id = p.workType')
->leftJoin('p.configurations','c');
$queryBuilder->add('where', $queryBuilder->expr()->in('c', ':c'))
->andWhere('wt.slug = :slug')
->setParameters(array('slug'=> $slug, 'c'=> $configurations));
return $queryBuilder->getQuery()
->getResult();
}
它的工作原理,但proble是返回我配置的阵列我传递给查询所有的产品配套。
例如,如果阵列有id
和Configuration.php
,查询返回我configuration.id = 1,configuration.id = 2和configuration.id产品匹配= 1和2。
所以我有3个条件来实现,我只需要一个; e-g只有包含所有configuration.id!的产品 。
我只需要返回一个包含Configuration.php
的ids
传递到阵列当前WorkType.php
唯一的一个产品!
这是我的控制器代码:
$vars = array(); //containing all values I need for recover configurations properties
$em = $this->getDoctrine()->getManager();
$var = array_values($vars);
$configurations = $this->getDoctrine()->getRepository('MyBundle:Configuration')->findByName($var);
foreach ($configurations as $conf) {
$name = $conf->getName();
}
$slug = "the_right_database_correspondence";
$arrayProbuctConfig = $this->getDoctrine()->getRepository('MyBundle:Product')->getProductByManyConfig($slug, $configurations);
// return of the view
由于配置的选择可以改变,我需要创建这个充满活力的方法。我怎样才能得到好的结果?
感谢您的回答,我现在还没有与我的代码,但请指望我尝试一下您的建议。谢谢你的方式! –
如果我输入** 2或多个配置**,则您的解决方案可以很好地工作,但如果我的数组包含** 0/NULL或1 Configuration **,则查询将为我的所有产品返回workType。所以我需要解决这个问题。 –
@french_dev如果我很好地理解了您的评论,那么当您传递一个空数组时,我编辑了我的代码以限制为Product,而不进行配置。关于仅传递一种配置的情况,您应该只将产品连接到该配置。 –