2012-05-23 77 views
1

現在我設法得到隨機AJAX輸出,我想從數據庫中獲取一些有用的值作爲下一步。如何從extbase動作獲取數據庫字段值?

再一次,我的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方法,但我不確定這是否會有所幫助。

回答

2

免責聲明:通常使用的findAll()方法可以實時因此performance killer嘗試編寫自定義查找器,只選擇需要的屬性,especcialy如果你的模型是大還是包含了很多關係!

您已經足夠接近了,因爲您可以使用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和發送更復雜的對象,以得到你所需要的一次。

P.S.嘗試總是使用爲例JsonLint - 在線驗證器來驗證,如果你期望的輸出是有效的。

+2

您可以通過'$ dataFromRepo'迭代,而無需調用'指定者()''的對象QueryResults'上,順便說一句。 – peter

+0

@peter:你當然是對的。在這種情況下,toArray()是多餘的調用。 – biesior

+0

謝謝你,這個工程就像一個魅力,只有一個問題,我離開了,我會問,在未來,希望最後一個問題:) – user828591