我如何通过数组的值过滤我的学说要求?

问题描述 投票:0回答:1

我正在使用原则从数据库中加载数据:

$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;
    }
  }

但是我收到错误消息:

注意:数组到字符串的转换

php arrays database symfony doctrine
1个回答
1
投票

有两种可能。

正如他们已经写的,您可以内嵌数组。

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

© www.soinside.com 2019 - 2024. All rights reserved.