2016-12-22 14 views
0

私は多くの援助をすべて手に入れました。BUT findByクエリを使用するとデータが変換されます。doctrineの結果セットをfindbyクエリからjend jsonを使用してfindbyクエリから

私がしたいことは、オブジェクトがそのように私は他にこのどこかに使用できる直列化されることを保証するこのクエリからresulsetのJSON文字列です:Zend Framework Jsonから

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

Json::encode($posts,true)のが、ときに私のデータが表示されませんこれを行う。

結果はJSONは、私がどこかに渡すことができますエンティティオブジェクトを文字列にエンコードされます

私は復号化のために使用します

:私は\Zend\Json\Json::TYPE_ARRAY)を使用する必要がある場合を除き

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

ここで

+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'])); 
      } 
     }); 

はそれがお役に立てば幸いです。

関連する問題