簡體   English   中英

Symfony Doctrine 陣列結果的展平陣列結果

[英]Flatten Array Result of Symfony Doctrine Array Result

使用存儲庫,我得到了一個數組結果(每個數組都是一個實體對象),如下所示:

array(
  0 => object of type entity,
  1 => another object of type entity,
  2 => another object of type entity,
)

每個 object 都有一些屬性,如 id 和 name 等。但我想要的是僅使用每個 object 的 id 展平整個數組。

我想要的是這個(僅使用 ID 展平數組):

Array
(
    [0] => 1
    [1] => 6
    [2] => 23
)

我的解決方案:

$ids = array_map($transform = function($entity) {
    if ($entity instanceof Entity) {
       return $entity->getId();
    }
 }, $myGreatDbResult);

我的解決方案有效,但有沒有更好的方法來獲得這個結果?

一旦你得到標識符數組[0 => ['id' => 1], 1 => ['id' => 6], 2 => ['id' => 26] ...]只是你有使用array_column函數從輸入數組中的單個列獲取值:

$ids = array_column($result, 'id');

自PHP 5.5.0起

輸出:

Array
(
    [0] => 1
    [1] => 6
    [2] => 23
    ...
)

你得到的結果:

array(
  0 => object of type entity,
  1 => another object of type entity,
  2 => another object of type entity,
)

可能是findBy()getResult()方法的結果。 要實現您想要的功能,您需要創建自己的查詢並執行以下操作:

$result = $entityManager->createQueryBuilder()
    ->from('AcmeDemoBundle:Entity', 'e') //your entity
    ->select('e.id') //your id field
    ->getQuery()
    ->getScalarResult();

這將為您提供您期望的陣列

最好的做法是使用symfony本地方法,所以Tomasz Madeyski說,使用

...->getQuery()->getScalarResult()

你也可以這樣做

->getQuery()->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY)

一個好的做法也是創建方法INTO存儲庫類,並通過給出兩種類型的選擇使其混合:例如:。

public function findAll($hydratedArray = false)
{
    $query = $this  ->createQueryBuilder('p')
                    ->leftJoin('p.company', 'c')
                    ->select('p')
                    ->orderBy('c.name', 'ASC');

    $result = $hydratedArray    ? $query
                                    ->leftJoin('p.series', 's')
                                    ->leftJoin('s.variety', 'v')
                                    ->addSelect('c', 's', 'v')
                                    ->getQuery()
                                    ->getResult(\Doctrine\ORM\Query::HYDRATE_ARRAY) // or getScalarResult()
                              : $query->getQuery()->getResult();

    return $result;
}

做你想做的事,你現在可以簡單地使用

$qb->getSingleColumnResult()

它返回一個包含每列值的數字數組(省略列名等)

根據用戶KicksheepSon評論

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM