2016-12-22 8 views
0

Я получил много помощи для всего BUT преобразование данных при использовании запроса findBy.convert doctrine resultset to json from findby query с помощью zend json

То, что я хочу, это JSON строка из resulset из этого запроса гарантируя, что объекты сериализуются, поэтому я могу использовать это где-нибудь еще:

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

Json::encode($posts,true) из Zend Framework Json но данные не отображаются, когда я сделай это.

Результат будет JSON закодированные строки с объектами сущностей, которые я могу пройти куда-нибудь

Я буду использовать для декодирования:

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

ПОКА Я должен использовать \Zend\Json\Json::TYPE_ARRAY)

+1

Проблема в $ post - это массив ArrayCollection/PersistCollection. И связь любого сообщения может быть доверенным доктором, чтобы лениво загружать данные. Лучше, если вы преобразуете $ posts в массив, тогда вы ** закодируете ** (не декодируете) на JSON. –

ответ

0

Вот как это делается:

включают в себя: use Zend\Json\Json;

вот мой пример функции/действий:

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

Тогда вызов в 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'])); 
      } 
     }); 

Надеется, что это помогает.