2012-05-23 7 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 если ваша модель большой или содержит много связей!

Вы находитесь достаточно близко, так как вы можете отправить результат findAll() с помощью json_encode(), но будьте осторожны, в зависимости от вашей модели json, созданный с помощью findAll, может быть действительно огромным. Лучше проецировать результаты и переписывать в новый массив только требуемые значения.

$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' без вызова' toArray() 'объекта' QueryResults', кстати. – peter

+0

@peter: Вы правы, конечно. В этом случае toArray() является избыточным вызовом. – biesior

+0

Спасибо, это работает как шарм, только одна проблема для меня ушла, я спрошу, что в следующем, надеюсь, последний вопрос :) – user828591

Смежные вопросы