对于工作中的项目,我们使用 PHPCR-ODM。我们有一个包含以下字段的文档:
/**
* @var \Doctrine\Common\Collections\ArrayCollection
* @PHPCRODM\ReferenceMany(targetDocument="SystemSize")
*/
private $system_sizes;
我们想为用户提供一个复选框列表 - 每个可能的 SystemSize 一个复选框 - 然后搜索包含至少一个指定 SystemSize 的任何文档。
例如,假设对象 A 有 Small 和 Large,对象 B 有 Medium 和 Large,而对象 C 有 Large。用户选择中小型。我们应该找到对象 A 和 B。
我的一位同事建议创建一个附加字段来表示所有引用文档的列表 - 因此在这种情况下,一个名为 system_sizes_list 的文本字段 - 然后使用 LIKE 比较来搜索该字段。
考虑到我们在使用 PHPPCR-ODM 时遇到的诸多限制,这可能是最好的解决方案……但我真的不想相信它;肯定有更好的方法!就是找不到>_>
可能相关:PHPCR-ODM 不(目前?)支持leftJoin()
, in()
, or orX()->addMultiple()
(尽管您可以orX()->addMultiple()
使用call_user_func_array()
...进行模拟)