使用zend json将doctrine结果集转换为来自findby查询的json

时间:2016-12-22 16:34:32

标签: php json zend-framework doctrine-orm doctrine

在使用findBy查询时,我已经为转换数据的所有内容提供了很多帮助。

我想要的是来自此查询的结果集的json字符串,确保对象被序列化,以便我可以在其他地方使用它:

$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 个答案:

答案 0 :(得分: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']));
            }
        });

希望它有所帮助。