php - 如何制作基于请求查找属性的查询构建器
问题描述
我在 symfony4 中有一个房地产网络应用程序,并且我有 db sql 结构:表(请求 - 任何客户都可以请求购买房产,属性 - 实际建筑物,字段 - 用于自定义表单的动态字段类型,如电流,电视, AC 和 FieldValues - 属性或请求与字段之间的关系,例如属性 3 获得了街道照明,或者像请求 nr 4 中客户请求的带有街道照明的属性)任务:创建一个查询构建器,返回所有匹配的属性应要求。
首先,我加入了(在 PropertiesRepository 中)每个属性的 FieldValues:
$qb->innerJoin(FieldValues::class,"fieldsValues", 'WITH', 'fieldsValues.property = p.id');
然后,对于请求的每个 FieldValue,我尝试:
- 1.)检查属性是否有这种FieldValue,因为当客户端添加他的属性时,他可以添加特定的fieldValues,也可以不添加
// $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())
遍历请求 fieldValues 的所有事情都在 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 函数,使所有结果集相交,但是当数据库记录数变大时,这会变得一团糟。我需要一个查询生成器来查找与确切请求字段匹配的属性。
所有图片都是表格字段值表
解决方案
您需要动态参数名称!
$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());
推荐阅读
- java - 如何在约束布局中添加浮动按钮
- authorize.net - 如何在授权前进行信用卡验证
- javascript - 为什么 esprima 在在线浏览器演示中运行良好,但在本地失败
- opencv - 如何构建只支持解码jpeg的opencv?
- c - 有限状态机硬件/软件事件触发
- c# - 将文件拆分成块并读取它们的字节
- javascript - 将标头发送到客户端后无法设置。找不到其他响应的发送位置。也许 componentDidMount 方法
- javascript - react-native:如何在 ScrollView onScroll 中添加标题动画
- r - 如何在 R 中按组集成逐步回归?
- r - 在 R 中运行观察到的功率测试