Symfony 2在数组字段内的自定义DQL请求

时间:2015-01-12 17:31:18

标签: symfony doctrine-orm dql

我正在尝试使用数组字段内的WHERE子句在我的存储库中创建自定义请求。我尝试了类似的东西,没有工作,但可以更好地展示我的问题:

$qb ->andWhere( "p.addresses[:index] = :address" )
    ->setParameter( "index" , $p_idLang )
    ->setParameter( "address" , $p_address );

1 个答案:

答案 0 :(得分:2)

documentation关于数组类型中提取:

  

根据PHP序列化映射和转换数组数据。如果你需要   要存储数组数据的精确表示,您应该这样做   考虑使用此类型,因为它使用序列化来表示   数组的精确副本作为数据库中的字符串。检索到的值   从数据库总是使用转换为PHP的数组类型   反序列化或如果没有数据则为null。

您的查询没有意义。你有几个选择:

  1. 检索p.adresses并使用php p.adresses[$index] = $address
  2. 进行检查
  3. 尝试一些不太可靠但可行的方法:
  4. $val_length = strlen($p_address); $qb ->andWhere( "p.addresses LIKE :indexAddress" ) ->setParameter( "indexAddress" , "%i:$p_idLang;s:$val_length:$p_address%" );

    1. 在此实体与新实体之间创建新实体和关系oneToMany。
    2. 我定义尝试选项3.如果阵列很大或将来会变大,选项1不是一个选项。我不会选择选项2,但实验可能值得尝试。