php - Doctrine mysql,检查数组是否在其他数组中

标签 php mysql arrays symfony doctrine-orm

我的数据库中有一个数组字段。

如果我看我有那个: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/

相关文章:

php - 为什么隐藏输入字段的值总是给我相同的结果?

php - codeigniter 中的查询给出错误

php - Zend 框架中的多语言站点

mysql - 如果 Alter 表中的单个索引是多列索引的一部分,则不会添加它

sql - 对 SQL 语句中的特定行应用特定条件

Java BigInteger(byte[] val)

javascript - 如何访问所有嵌套的关联数组元素?

javascript - 从 JSON 数组 Javascript 创建菜单

php - Laravel 5.2 : Do something after user has logged in?

javascript - jQuery ajax 表单提交到 php 无法处理服务器的响应