我对单个数据库查询有些麻烦,希望你能帮助我:)。在当前项目中,存在多个彼此相关的模型。我的问题的相关模型是:Product和AttributeSet,每个产品都可以拥有n-AttributSets。
如果我查看数据库表,那么我可以看到类似的东西:
Product:
uid | attribute_sets | ...
---------------------------
101 | 15 | ...
...
AttributeSet:
uid | name | product | list_value | ...
----------------------------------------
600 | a | 101 | 6,59,102 | ...
665 | b | 101 | 3,12,79 | ...
...
此外,我想通过list_value过滤产品。据我所知,单个TYPO3内置的数据库查询函数(例如“in”,“contains”等)是不可能的,因为这种关系通常应该用m:n-relations完成,但我不能为此更改项目。所以我试图结合一些查询约束来实现这个目的:
public function findProductsExample()
{
$query = $this->createQuery();
$query->getQuerySettings()->setRespectStoragePage(false);
$query->getQuerySettings()->setIgnoreEnableFields(false);
$query->matching(
$query->logicalAnd(
[
$query->equals('deleted', 0),
$query->logicalAnd(
[
$query->logicalOr(
[
$query->like('attributeSets.listValue', '\'6,%\''),
$query->like('attributeSets.listValue', '\'%,6,%\''),
$query->like('attributeSets.listValue', '\'%,6\''),
]
),
$query->logicalOr(
[
$query->like('attributeSets.listValue', '\'59,%\''),
$query->like('attributeSets.listValue', '\'%,59,%\''),
$query->like('attributeSets.listValue', '\'%,59\''),
]
),
]
)
]
)
);
return $query->execute()->toArray();
}
在此测试用例中,我尝试在其中一个属性集的list_value字段中查找包含值6和59的所有产品,但此测试的查询结果始终为空:(。
所以我已经开始调试生成的SQL并得到类似的东西(不相关的东西被删除):
SELECT `tx_vic_domain_model_product`.*
FROM `tx_vic_domain_model_product` `tx_vic_domain_model_product`
LEFT JOIN `tx_vic_domain_model_attributeset` `tx_vic_domain_model_attributeset`
ON `tx_vic_domain_model_product`.`uid` = `tx_vic_domain_model_attributeset`.`product`
WHERE ((`tx_vic_domain_model_product`.`deleted` = 0)
AND ((((`tx_vic_domain_model_attributeset`.`list_value` LIKE '6,%')
OR (`tx_vic_domain_model_attributeset`.`list_value` LIKE '%,6,%'))
OR (`tx_vic_domain_model_attributeset`.`list_value` LIKE '%,6'))
AND (((`tx_vic_domain_model_attributeset`.`list_value` LIKE '59,%')
OR (`tx_vic_domain_model_attributeset`.`list_value` LIKE '%,59,%'))
OR (`tx_vic_domain_model_attributeset`.`list_value` LIKE '%,59'))))...
此外,我也通过mysql cli和phpmyadmin解雇了这个生成的查询。在这两种情况下,我从MySQL获得了非空结果,因此生成的查询似乎是正确的,但为什么存储库的查询结果为空,我该如何解决这个问题?