我正在尝试使用数组字段内的WHERE子句在我的存储库中创建自定义请求。我尝试了类似的东西,没有工作,但可以更好地展示我的问题:
$qb ->andWhere( "p.addresses[:index] = :address" )
->setParameter( "index" , $p_idLang )
->setParameter( "address" , $p_address );
答案 0 :(得分:2)
从documentation关于数组类型中提取:
根据PHP序列化映射和转换数组数据。如果你需要 要存储数组数据的精确表示,您应该这样做 考虑使用此类型,因为它使用序列化来表示 数组的精确副本作为数据库中的字符串。检索到的值 从数据库总是使用转换为PHP的数组类型 反序列化或如果没有数据则为null。
您的查询没有意义。你有几个选择:
p.adresses
并使用php p.adresses[$index] = $address
$val_length = strlen($p_address);
$qb ->andWhere( "p.addresses LIKE :indexAddress" )
->setParameter( "indexAddress" , "%i:$p_idLang;s:$val_length:$p_address%" );
我定义尝试选项3.如果阵列很大或将来会变大,选项1不是一个选项。我不会选择选项2,但实验可能值得尝试。