php - Doctrine2 在字段数组中按值查找

标签 php symfony doctrine-orm doctrine find

我想知道是否有一种方法可以搜索如下所示的文档字段:

/**
 * @var array
 *
 * @ORM\Column(name="tags", type="array", nullable=true)
 */
private $tags;

在数据库中看起来像 php 数组解释:

a:3:{i:0;s:6:"tagOne";i:1;s:6:"tagTwo";i:2;s:8:"tagThree";}

现在我尝试通过尝试的标签搜索实体

public function findByTag($tag) {
    $qb = $this->em->createQueryBuilder();
    $qb->select('u')
        ->from("myBundle:Entity", 'u')
        ->where('u.tags LIKE :tag')
        ->setParameter('tag', $tag );
    $result=$qb->getQuery()->getResult();
    return $result;
}

总是返回 array[0] 就是不明白

我可以改变它们的保存方式 对于任何帮助,提前致谢

最佳答案

您需要在要搜索的值之前和/或之后为% 定义一个literal 标记;在这种情况下,您甚至不需要在短语前后使用单引号:

$qb = $this->em->createQueryBuilder();
$qb->select('u')
    ->from("myBundle:Entity", 'u')
    ->where($qb->expr()->like('u.tags', $qb->expr()->literal("%$tag%")))
$result=$qb->getQuery()->getResult();
return $result;

您可以关注所有 Doctrine expr class 的列表

关于php - Doctrine2 在字段数组中按值查找,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23875574/

相关文章:

php - Symfony2 - 如何在提交表单后从唯一约束错误中恢复?

symfony - Doctrine Timestampable 扩展不持久

php - 如何从具有特殊编码的单词中获取每个字符

php - MySQL 排序英国邮政编码

javascript - 在 AngularJS 中使用工厂显示数据

security - Symfony - 了解 super 管理员

php - 学说 2 : inheritance mapping join with parent table

php - Google App Engine 上的 WordPress 设置过程中出现错误

php - 如何使用 symfony 3.4 设置语言环境

php - Symfony - 将旧项目 (v 2.6) 升级到 3.4