2016-12-22 3 views
0

Ich habe viel Hilfe für alles ABER Transformation Daten bei der Verwendung der findBy Abfrage.konvertieren Doktrin Resultset zu Json von Findby Abfrage mit Zend JSON

Was ich will, ist ein JSON-String des resulset aus dieser Abfrage sicherzustellen, dass die Objekte serialisiert werden, so kann ich sonst diese irgendwo verwenden:

$posts = $entityManager->getRepository(\Application\Entity\Post::class) 
     ->findBy(['status'=>\Application\Entity\Post::STATUS_PUBLISHED], 
      ['dateCreated'=>'DESC']); 

Json::encode($posts,true) von Zend Framework Json aber die Daten werden nicht angezeigt, wenn ich mach das.

Das Ergebnis wird eine JSON-String mit den Entitätsobjekten codiert werden, die ich woanders passieren kann

ich für die Decodierung verwenden:

\Zend\Json\Decoder::decode($posts,\Zend\Json\Json::TYPE_OBJECT)

wenn ich \Zend\Json\Json::TYPE_ARRAY) werden sollte mit

+1

Das Problem dort ist $ post ist eine ArrayCollection/PersistCollection. Und die Beziehung eines jeden Posts kann ein Proxys sein, um Daten lazy zu laden. Es sollte besser sein, wenn Sie $ Posts in ein Array transformieren und dann ** zu JSON verschlüsseln (nicht dekodieren). –

Antwort

0

Hier ist die Art, wie ich es mache:

umfassen: use Zend\Json\Json;

hier mein Beispiel von Funktion/Aktion:

public function getListAction(){ 
     $request = $this->getRequest(); 
     if($request->isPost()){ 
      // recuperer le produit choisi : 
      $element = $request->getPost("element"); 
      $result = null; 
      $result = $this->getEntityManager()->getRepository('Application\Entity\Element')->findBy(array('etat' => 'valide' , 'pkElement' => $element)); 
      $champs = array(); 
      $i = 0; 
      foreach ($result as $value) { 
       $champs[$i] = array("id"=>$value->getPkElement() , "nom"=>$value->getNom()); 
       $i++; 
      } 
      $data = array(
       'result' => true, 
       'data' => $champs 
      ); 
      return $this->getResponse()->setContent(Json::encode($data)); 
     } 
    } 

Dann wird der Anruf in der view.phtml:

$.post('/application/controller_name/getList', {element: $("select[name=element]").val()}, function(result) { 
      var options = $("select[name=element]"); 
      var obj = JSON.parse(result); 
      var data = obj.data; 
      var selected = ""; 
      options.empty(); 
      for (var i = 0; i < data.length; i++) { 
       options.append($("<option />").val(data[i]['id']).text(data[i]['nom'])); 
      } 
     }); 

Hoffe, es hilft.