我对一个项目有问题,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 条件来查找数据。