gpt4 book ai didi

php - 如何制作基于请求查找属性的查询构建器

转载 作者:行者123 更新时间:2023-11-30 21:28:23 25 4
gpt4 key购买 nike

我在 symfony4 中有一个房地产网络应用程序,我有 db sql 结构:表(请求 - 任何客户都可以请求购买特性,属性 - 实际建筑物,字段 - 用于自定义表单的动态字段类型,如 ElectricCurrent , TV, AC 和 FieldValues - 属性或请求与字段之间的关系,比如属性 3 有路灯,或者像请求 nr 4 中的客户端请求的属性有路灯)任务:创建一个查询构建器,返回所有基于请求匹配的属性。


首先,我为每个属性加入(在 PropertiesRepository 中)FieldValues:

$qb->innerJoin(FieldValues::class,"fieldsValues", 'WITH', 'fieldsValues.property = p.id');

然后,对于请求的每个 FieldValue,我尝试:

  • 1.) 检查属性是否有这种字段值,因为当客户添加他的属性时,他可以添加特定的字段值,也可以不添加

// $fieldValReq is the fieldValue of the request from the current iteration 
// fieldsValues.field represent FieldValue's Field Id
$qb
->andWhere($qb->expr()->eq("fieldsValues.field", ':valueF'))
->setParameter('valueF', $fieldValReq->getField()->getId())
  • 2.) 检查找到的属性中的 FieldValue 值是否是请求的 FieldValue

$qb
->andWhere($qb->expr()->eq("fieldsValues.value", ':valueV'))
->setParameter('valueV', $fieldValReq->getValue())

一切都在遍历请求字段值的 foreach 中发生


问题是,在第一次迭代之后,例如(第二次迭代),查询构建器的结果降为 0,因为在第一次迭代中执行的这段代码已经与 fieldValue 的 id(例如街道照明)匹配,并且现在尝试通过当前 fieldValue 的 id(例如 PVC Windows)再次匹配找到的结果,这无法完成,因为一个 id 不能匹配 2 个不同的东西。

$qb
->andWhere($qb->expr()->eq("fieldsValues.field", ':valueF'))
->setParameter('valueF', $fieldValReq->getField()->getId())

我唯一的解决方案是为每个 fieldValue 获取一组不同的结果,并制作一个 php 函数来计算所有结果集的交集,但是当数据库记录数变大时,这会变得一团糟。我需要一个查询生成器来查找与确切请求字段匹配的属性。

所有图片都是表格字段值表

  • 1.) 寻找请求编号 1022 的字段值 enter image description here
  • 2.) 寻找匹配请求编号 1022 fieldValues 的属性 enter image description here

最佳答案

您需要动态参数名称!

    $valueFName = sprintf('valueF%d', $fieldValReq->getField()->getId());
$valueVName = sprintf('valueV%d', $fieldValReq->getField()->getId());
$qb
->andWhere($qb->expr()->eq("fieldsValues.field", ':'.$valueFName))
->setParameter($valueFName, $fieldValReq->getField()->getId());

$qb
->andWhere($qb->expr()->eq("fieldsValues.value", ':'.$valueVName))
->setParameter($valueVName, $fieldValReq->getValue());

关于php - 如何制作基于请求查找属性的查询构建器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57624604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com