Vie mi niekto poradiť či existuje možnosť ako z repository, alebo z querybuildera dostanem iba idčka bez toho, aby sa vytvárali entity? Teda ak tomu správne chápem, a Doktrína vytvára pri volaní findBy a pod. vždy entity. Ale ja tie entity nepotrebujem vytvoriť. Chcem len idčka.

Má vôbec zmysel nad tým takto uvažovať?

Mám napríklad kód:

/**
 * @desc Find ids of category and nested categories
 * @param $category Entity\Category
 * @param $ids array
 * @return array
 */
public function findCategoryIds( Entity\Category $category, array $ids = [ ] )
{
    $ids[] = $category->id;

    $children = $this->categoryRepository->findBy( [ 'parent_id' => $category->id ] );

    foreach ( $children as $child )
    {
        $ids[] = $this->findCategoryIds( $child, $ids );
    }

    return $ids;
}

Chápem to správne, že tento problém musím riešiť cez queryBuilder a hydratáciu? Prepísal som tú metódu takto:

/**
 * @desc Find ids of category and nested categories
 * @param $id integer
 * @param $ids array
 * @return array
 */
public function findCategoryIds( $id, array $ids = [ ] )
{
    $ids[] = $id = (int) $id;

    $children = $this->categoryRepository
        ->createQueryBuilder()
        ->select( 'c.id' )
        ->from( 'App\Model\Entity\Category', 'c' )
        ->where( 'c.parent_id = :id' )
        ->setParameter( 'id', $id )
        ->getQuery()
        ->execute( null, Doctrine\ORM\Query::HYDRATE_ARRAY );

    foreach ( $children as $child )
    {
        $ids[] = $this->findCategoryIds( $child['id'], $ids );
    }

    return $ids;
}

Je to tak správne?

Do hája, keď som to premeral tak mi vyšlo, že ten prvý kód je rýchlejší asi o 6 stotín. Ale to je asi spôsobené tou reurziou ak to chápem správne. Inštancovanie toho queryBuildera zrejme niečo stojí. Či sa mýlim?


You must first log in to participate in this discussion