我的数据库中有一个数组字段。
如果我看我有那个:a:3:{i:0;s:10:"23-09-2014";i:1;s:10:"24-09-2014"; i:2;s:10:"01-10-2014";}
在我的 Controller 中,我从一个字符串创建了另一个数组:
$array = explode(",", '01-02-2014, 02-03-2014, 03-04-2014');
我想知道,如果我的数组 $array
的所有日期都在数据库中的我的字段中,则使用 createQueryBuilder()
...就像 $query->where('All_my_date_in_$array ARE IN my_array_field')
你知道这样做的方法吗?谢谢!
最佳答案
是的,这可以通过对保存在列中的序列化数据使用通配符搜索来实现,例如循环遍历日期数组并在循环中添加 where 子句与每个要匹配的数据,这很糟糕,因为日期应该保存为它们的真实日期类型,对于序列化,您应该通过制作关系表将其存储为更多信息,请参阅 Database normalization
$query = $em->createQueryBuilder('u');
$i=1;
foreach($dates as $date){
if($i== 1){
$query->where( 'u.your_column_name LIKE :date_'.$i);
}else{
$query->andWhere( 'u.your_column_name LIKE :date_'.$i);
}
$query->setParameter('date_'.$i, '%'.$date.'%');
$i++;
}
$result= $query->getQuery()
->getResult();
因此这将通过 and
操作为数组中的每个日期匹配 your_column_name
并且将返回包含这些日期的结果集
关于php - Doctrine mysql,检查数组是否在其他数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26001436/