2012-07-22 13 views
8

Mam kilka takich kontrolerów: CategoryController i NewsController Jak również modele domen dla kategorii i wiadomości oraz reposirtories dla obu.repozytorium extbase findAll() zwraca wynik zerowy

W NewsController robię wstrzykiwanie zależności takiego (tak samo jak w categoryController):

/** 
* categoryRepository 
* 
* @var Tx_MyExtension_Domain_Repository_CategoryRepository 
*/ 
protected $categoryRepository; 


    /** 
* injectCategoryRepository 
* 
* @param Tx_MyExtension_Domain_Repository_CategoryRepository $CategoryRepository 
* @return void 
*/ 
public function injectCategoryRepository(Tx_MyExtension_Domain_Repository_CategoryRepository $categoryRepository) { 
    $this->categoryRepository = $categoryRepository; 
} 

Kiedy próbuję teraz w funkcji coś takiego:

/** 
* action getCategoriesAjax 
* 
* @param Tx_MyExtension_Domain_Model_News 
* @return void 
*/ 
public function getCategoriesAjaxAction() { 
    $categories = $this->categoryRepository->findAll(); 
    $this->view->assign('categories',$categories); 
} 

I odzyskaj pusty wynik.

Dziwne dla mnie jest to, że jeśli robię to w CategoryController, ta sama funkcja działa jak charm i zwraca wszystkie elementy w bazie danych, a nawet mi obcy jest, że jeśli zrobię $ to -> categoryRepository-> findByUid (1) Otrzymuję prawidłowy element jako wynik.

Dodałem też do mojego categoryRepository funkcję testową:

public function test(){ 
    $query = $this->createQuery(); 
    $result = $query->execute(); 
    $amount = $result.count(); 
} 

Gdybym wywołać tę funkcję od categoryController, wrócę odpowiednią ilość elementów. Jeśli dzwonię to z mojego NewsController otrzymuję „0” z powrotem ...

ja nie rozumiem ...

Czego brakuje ??? Gdzie jest mój błąd?

Odpowiedz

2

Czy na pewno wartość zwracana przez funkcję findAll() ma wartość NULL?

Możliwe, że Twój Dependency Injection nie działa. Następnie Wyjątek powinno być coś takiego:

findAll() jest wywoływana na Non-Object ($ this-> categoryRepository)

również w swojej injectCategoryRepository piszesz $categoryRepository w lowerCamelCase i w adnotacji w UpperCamelCase$CategoryRepository

Hope this helps ..

+1

Thx za podpowiedź z górną/dolnąCamelCase. Miałem nadzieję, że to będzie rozwiązanie ... przyjrzę się temu głębiej, aby upewnić się, że nie ma tego w ciężkich miejscach. Nie dostaję błędu, otrzymuję obiekt Tx_Extbase_Persistence_QueryResult z powrotem, ale bez wyniku. Nie otrzymam również komunikatu o błędzie. Dziękujemy za wsparcie! – kapale

+0

Znaleźliśmy problem UpperCamelCase na drugim miejscu, ale niestety nie rozwiązałem mojego problemu. (Po usunięciu wszystkich pamięci podręcznych) – kapale

11

To mnie wkurzyło przez kilka dni (lub tygodni). StoragePid (odniesienie do strony, na której swoje elementy bazy danych są połączone) nie sprawiają, że na zapytania do bazy danych, jeśli nie definiują gdzieś w TypoScript następujący:

plugin.tx_myextension.persistence.storagePid = 4 

umieścić to w swoim PAGE- TS i metoda findAll z Tx_Extbase_Persistence_Repository powinny działać poprawnie.

Tygodnie.

+0

Kocham Cię za to! –

1

Jak powiedział Hendrik, możesz ustawić go na swojej stronie TS. Innym rozwiązaniem jest: w tobie BE, edytuj zawartość strony zawierającą wtyczkę, wybierz folder Sys, w którym przechowywane są twoje elementy db. Można to znaleźć w zakładce "Zachowanie" dla Typo3 v6.1

3

Albo można zmusić repozytorium ignorować przechowywaniu:

class MymodelRepository extends \TYPO3\CMS\Extbase\Persistence\Repository { 
    public function initializeObject() { 

    $this->defaultQuerySettings = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Typo3QuerySettings'); 
    $this->defaultQuerySettings->setRespectStoragePage(FALSE); 
} 
} 

Odtąd repozytorium będzie ciągnąć każdy rekord z bazy danych.

+0

zobacz dokumentację wszystkich opcji: https://wiki.typo3.org/Default_Orderings_and_Query_Settings_in_Repository –

Powiązane problemy