我正在使用原则从数据库中加载数据:
$data = $this->em->getRepository('App\\Entity\\Data')->allData();
这将创建一个包含大量数据的数组:
PagesGenerator.php on line 259:
array:1696 [▼
0 => Data^ {#5430 ▼
-id: 2298
-uuid: "426441e418"
-content: "two"
-document_id: "93b7dc32f4"
}
1 => Data^ {#5434 ▼
-id: 2299
-uuid: "c1474a87a9"
-content: ""
-document_id: "93b7dc32f4"
}
2 => Data^ {#5413 ▼
-id: 2300
-uuid: "8bfd9b4893"
-content: "three"
-document_id: "edb8fa9647"
}
3 => Data^ {#5427 ▶}
4 => Data^ {#5428 ▶}
5 => Data^ {#5433 ▶}
6 => Data^ {#5431 ▶}
7 => Data^ {#5429 ▶}
我还有另一个数组$docIds
:
array:96 [▼
0 => "3019b7a82f"
1 => "b1a4c67080"
2 => "82cf4392d7"
3 => "55768e0955"
4 => "74c6217001"
5 => "71fc4c3ebf"
6 => "35e2d3a1c6"
7 => "50c940b223"
8 => "2561ff454d"
9 => "bb447530e1"
为了获得快速的性能,我想对数组$data
进行预过滤,以仅包含具有document_id
的条目,这些条目是我的数组$docIds
中的值;
这是我的方法:
$data = $this->em->getRepository('App\\Entity\\Data')->filterByDocID($docIds);
在我的数据存储库中:
public function filterByDocID($array)
{
$query = $this->getEntityManager()
->createQuery(
"SELECT a
FROM App\Entity\Data a
WHERE document_id IN ('".$array."')");
try {
return $query->getResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
但是我收到错误消息:
注意:数组到字符串的转换
有两种可能。
正如他们已经写的,您可以内嵌数组。
WHERE document_id IN ('".implode(',', $array)."')");
或您正在绑定数组。
$stmt->bindValue(0, array(123, 234, 345, 456, 567, 678));
我更喜欢绑定数组,因为与将其内嵌和解析为字符串相比,这样做要干净得多。
E:
由于您使用字符串作为id,请尝试以下操作:
WHERE document_id IN ('".implode("', '", $array)."')");
否则,请尝试使用LIKE