如何从扩展库操作获取数据库字段值



现在我设法获得了随机的AJAX输出,下一步我想从数据库中获取一些有用的值。

再一次,我的 AJAX 调用看起来像这样(此外,我添加了一个 JSON 调用,这会更好)。

        
        $.ajax({
              url: "index.php",
              data: "tx_myext_myplugin1[controller]=Mycontroller1&tx_myext_myplugin1[action]=ajax&type=89657201",
              success: function(result) {
                alert(result);
              }
            });
    /*
    var uri = '<f:uri.action action="ajax" controller="Mycontroller1" pageType="89657201" />';
    jQuery.getJSON(uri, function(result) {
        alert(result.c);
    });
    */
        

我的 ajaxAction 函数:

        
        public function ajaxAction() {
        $arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
        return json_encode($arr);
    }
        

当我使用 JSON 调用时,这有效,现在我需要获取一个包含数据库值的数组。我认为使用 findAll() 函数调用存储库已经有所帮助,但我认为它不是一个数组,这就是我不能使用它的原因。一个不同的想法是使用我在模型中编写的 getValue 方法,但我不确定这是否有帮助。

免责声明: 通常使用 findAll() 方法可以是真实的performance killer因此尝试编写自定义查找器,仅选择所需的属性,特别是如果您的模型很大或包含许多关系!

你已经足够接近了,因为你可以用json_encode()发送findAll()结果,但要小心,根据你的模型,从findAll创建的json可能非常大。最好迭代结果并仅重写为新数组所需的值。

    $dataFromRepo = $this->yourRepository->findAll();
    $resultArray = array();
    foreach ($dataFromRepo as $object){
        $resultArray[$object->getUid()] = $object->getTitle();
    }
    return json_encode($resultArray);

结果,您将获得基本的 JSON object

{
    "1": "Title of first item",
    "2": "Second item",
    "3": "Et cetera"
}

何时从$resultArray中删除自定义索引

    foreach ($dataFromRepo as $object){
        $resultArray[] = $object->getTitle();
    }

你会得到 JSON array

[
    "Title of first item",
    "Second item",
    "Et cetera"
]

等等。当然,您也可以multidimensional array这种方式构建并发送更复杂的对象,以一次获得所需的一切。

附言:尝试始终使用示例 JsonLint - 在线验证器来验证您期望的输出是否有效。

最新更新