2017-06-22 4 views
1

Ich habe keine Ahnung warum, aber nach ein paar (nicht verwandten) Änderungen sind alle meine Returns Objekte statt Arrays. Zum Beispiel:Symfony-Doktrin gibt Objekte anstelle von Arrays zurück

ReceiptController.php

/** 
* Get all receipts for the team. 
* 
* @param String $id 
* @return array 
* 
* @SWG\Response(
*  response=201, 
*  description="Get all receipt for the team.", 
*  @SWG\Schema(
*   type="array" 
* ) 
*) 
*/ 
public function getTeamReceiptsAction($id): array 
{ 
    $parameterBag = [ 
     'teamId' => $id 
    ]; 

    $items = $this->manager->getAll($parameterBag); 

    return $items; 
} 

Receiptrepository

/** 
* @inheritdoc 
*/ 
public function getFilterQuery($parameterBag): QueryBuilder 
{ 
    $qb = $this 
     ->createQueryBuilder('s') 
    ; 

    if (isset($parameterBag['id'])) { 
     $qb->andWhere('s.id=(:id)') 
      ->setParameter('id', $parameterBag['id']); 
    } 

    if (isset($parameterBag['teamId'])) { 
     $qb->andWhere('s.team=(:team)') 
      ->setParameter('team', $parameterBag['teamId']); 
    } 

    return $qb; 
} 


/** 
* @inheritdoc 
*/ 
public function getAll($parameterBag): ?array 
{ 
    $qb = $this->getFilterQuery($parameterBag); 

    return $qb->getQuery()->getResult(); 
} 

Returns: {"0":{"email":"[email protected]","first_name"... Während ich würde [{"email":"[email protected]","first_name"... erwarten?

So gibt es ein Objekt mit mehreren Objekten anstelle eines Arrays zurück.

Aber das ist komisch, weil alle meine Funktionen eingegeben werden, um Arrays zurückzukehren, und ich bekomme keine Fehler?

+0

Machen Sie einen Dump (get_class ($ items)) und se Welche Art von Objekt ist es? Könnte ein Objekt sein, das die verschiedenen Array-Schnittstellen implementiert, die wiederum die Array-Typ-Tests bestehen. – Cerad

+0

Wenn ich das tue, bekomme ich den folgenden internen Fehler: '{" code ": 500," message ":" Warnung: get_class() erwartet Parameter 1 als Objekt, Array als "}'. Interessant. – user3634184

Antwort

2

versuchen, dies zu ändern:

return $qb->getQuery()->getResult(); 

dazu:

return $qb->getQuery()->getResult(Query::HYDRATE_ARRAY); 

In diesem Modus können Sie Ergebnisse in Array abrufen können

Oder wie Tomasz Madeysk dies schrieb versuchen:

return $qb->getQuery()->getArrayResult() 
+0

oder eine andere Möglichkeit, dies zu erreichen: 'getQuery() -> getArrayResult()' (es ist das gleiche unter der Haube) –

+0

ja, ich bevorzuge Abfrage :: HYDRATE_ARRAY aber ist eine andere gute Lösung! –

Verwandte Themen