数组类型中的原则选择



我对一个项目有问题,array学说的类型。我的实体获得了保存用户 ID 列表的字段用户列表。在我的数据库中,字段类型是文本:

/**
 * @Column(type="array", nullable=false)
 */
private $userslist;

像这样创建我的内容:

$r->createNewLine(50, 'Name', 'Content', array(1, 5, 8))

我的字段用户列表表中的结果如下所示(我认为这是关键 ->值(:

a:3:{i:0;i:1;i:1;i:5;i:2;i:8;}

我使用QueryBuilder来获取结果,这是我的请求:

$qb = $this->createQueryBuilder('r')
->andWhere('r.userslist IN (:userid)')
->setParameters(array('userid' => array(1)));
return $qb->getQuery()->getArrayResult();

结果我总是得到一个空数组。我的表中有几行,用户列表字段中的用户 ID 为 1。

a:3:{i:0;i:1;i:1;i:5;i:2;i:8;}
a:3:{i:0;i:1;i:1;i:5;i:2;i:8;}
a:3:{i:0;i:9;i:1;i:4;i:2;i:2;}
a:3:{i:0;i:1;i:1;i:5;i:2;i:8;}
a:3:{i:0;i:9;i:1;i:4;i:2;i:2;}
...

我还尝试使用一个表达式:

$qb->add('where', $qb->expr()->in('r.userslist', array(':userid')));

结果也是空的。但是当我使用 LIKE 它有效但不安全,因为我混淆了表中的键和值:

$qb = $this->createQueryBuilder('r')
    ->andWhere("r.userslist LIKE :userid")
   ->setParameters(array('userid' => '%i:1;%'));

如何获取用户 ID 1 在我的用户列表字段中的位置?

谢谢

原则要求您解析整个字符串以找到直接匹配项,其他明智的做法似乎是您需要使用 LIKE 比较来根据所选数据查找记录。这是一个类似的问题 FOS 捆绑包 - 如何选择具有特定角色的用户?

为了避免此问题,您是否考虑过创建另一个实体并在该实体和用户对象之间创建关系,以便您不必依赖 LIKE 条件来查找数据。

相关内容

  • 没有找到相关文章