Репозиторий extbase findAll() возвращает нулевой результат

У меня есть несколько таких контроллеров: CategoryController и NewsController, а также модели доменов для категорий, новостей и репозиториев для обоих.

В NewsController я делаю зависимостьInjection следующим образом (так же, как и в 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;
}

Когда я сейчас пытаюсь сделать что-то вроде этого:

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

Я получаю пустой результат.

Для меня странно то, что если я делаю это в CategoryController, та же функция работает как шарм и возвращает все элементы в базе данных, и еще более странным для меня является то, что если я делаю $this-> categoryRepository->findByUid(1) В результате я получаю правильный элемент.

Я также добавил в свой categoryRepository тестовую функцию:

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

Если я вызову эту функцию из categoryController, я верну правильное количество элементов. Если я вызываю это из своего newsController, я получаю "0" обратно...

я не понимаю...

Что мне не хватает??? Где моя ошибка?


person kapale    schedule 22.07.2012    source источник


Ответы (4)


Это беспокоило меня в течение нескольких дней (или недель). StoragePid (ссылка на страницу, к которой прикреплены элементы вашей базы данных) не попадает в запрос к базе данных, если вы не определите следующее где-нибудь в TypoScript:

plugin.tx_myextension.persistence.storagePid = 4

Поместите это в свой Page-TS, и метод findAll из Tx_Extbase_Persistence_Repository должен работать нормально.

Недели.

person Hendrik    schedule 18.10.2012

Или вы можете заставить репозиторий игнорировать страницу хранилища:

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);
 }
}

С этого момента ваш репозиторий будет извлекать каждую запись из базы данных.

person greg    schedule 01.09.2014
comment
см. документацию по всем параметрам: wiki.typo3.org/ - person Tobias Gaertner; 05.10.2016

Вы уверены, что возвращаемое значение findAll() равно NULL?

Возможно, ваше внедрение зависимостей не работает. Тогда исключение должно быть примерно таким:

findAll() вызывается для не-объекта ($this->categoryRepository)

Также в вашем injectCategoryRepository вы пишете $categoryRepository в lowerCamelCase и в аннотациях в UpperCamelCase $CategoryRepository

Надеюсь это поможет..

person PeterTheOne    schedule 23.07.2012
comment
Спасибо за подсказку с верхним/нижним CamelCase. Я надеялся, что это будет решением ... Я посмотрю на это глубже, чтобы убедиться, что это не будет в серьезных местах. Я не получаю ошибку, я получаю объект Tx_Extbase_Persistence_QueryResult обратно, но без результата. Я также не получаю сообщение об ошибке. Спасибо за поддержку! - person kapale; 23.07.2012
comment
Нашел проблему с UpperCamelCase на второй позиции, но, к сожалению, это не решило мою проблему. (После удаления всех кешей) - person kapale; 23.07.2012

Как сказал Хендрик, вы можете установить его на своей странице-TS. Другое решение: в вашем BE отредактируйте содержимое своей страницы, содержащее плагин, выберите папку Sys, в которой хранятся ваши элементы базы данных. Это можно найти на вкладке «Поведение» для Typo3 v6.1.

person konjye    schedule 31.01.2014