extbase存储库findAll()返回结果null

时间:2012-07-22 17:11:35

标签: null repository extbase findall

我有几个像这样的控制器:CategoryController和NewsController 以及类别和新闻以及两者的再生器的领域模型。

在NewsController中我像这样做一个dependencyInjection(和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”...

我不明白......

我想念什么? 我的错误在哪里?

4 个答案:

答案 0 :(得分:12)

这已经让我烦恼了好几天(或几周)。如果您没有在TypoScript中的某处定义以下内容,则StoragePid(对数据库项目附加到的页面的引用)不会进入数据库查询:

plugin.tx_myextension.persistence.storagePid = 4

将它放在你的Page-TS中,来自Tx_Extbase_Persistence_Repository的findAll方法应该可以正常工作。

答案 1 :(得分:3)

或者您可以强制存储库忽略存储页面:

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

从现在开始,您的Repository将从数据库中提取每条记录。

答案 2 :(得分:2)

您确定findAll()的返回值是否为NULL?

可能是您的依赖注入不起作用。然后,例外应该是这样的:

  

在非对象上调用findAll()($ this-> categoryRepository)

同样在您的injectCategoryRepository中,您在 lowerCamelCase UpperCamelCase $categoryRepository

中的注释中编写$CategoryRepository

希望这会有所帮助..

答案 3 :(得分:1)

正如亨德里克所说,你可以在你的页面-TS中设置它。 另一种解决方案是:在BE中,编辑包含插件的页面内容,选择存储数据库项目的Sys文件夹。这可以在Typo3 v6.1

的“行为”选项卡下找到