【发布时间】:2016-09-16 12:56:54
【问题描述】:
我有和实体:公司,其中有一列:类型。
类型可以是字符串,也可以是字符串数组。
例如:类型可以是“Foo”、“Bar”或数组(“Foo”、“Bar”)。
我不知道如何获取类型包含“Bar”的所有公司。
我试过了
$qb = $this->companyRepository()->createQueryBuilder("c");
$companies = $qb
->select("c")
->Where( $qb->expr()->in('c.type', array($qb->expr()->literal('Bar'))))
->getQuery()
->getResult();
仅获取类型为“Bar”的公司,而不获取类型为数组(“Foo”,“Bar”)的公司。
我尝试了 $qb->expr()->like(...) 而不是 $qb->expr()->in(..) ,结果相同。
如何获得类型包含“酒吧”的公司? (假设 type 不仅仅是我给出的 3 个值作为示例)
【问题讨论】:
-
事件虽然学说允许您使用数组列类型,但在数据库级别您无法访问单个数组元素(毕竟它只是一个文本块)。因此,您不能对这些进行查询。您有两个选择:正则表达式查询,或规范化您的数据库。
-
有趣。我无法标准化我的数据库。正则表达式如何帮助我?我假设我只需要获取所有公司,然后在 foreach 循环中测试类型..
-
教义数组列类型要求您在数组值中不能有逗号。因此,您可以搜索的任何值,要么只需要列中的值,要么需要以逗号开头或以逗号结尾,或两者兼而有之。对于这四种情况,您需要编写一个有效的正则表达式并将其用作您的标准。
-
类似:
/(^|,)foo(,|$)/,我会尽快用可用代码添加答案。 -
顺便说一句。请注意,并非所有引擎都支持 Regex,因此您需要扩展以使其至少可用于 mysql。见:github.com/beberlei/DoctrineExtensions
标签: symfony doctrine query-builder