2012-07-22 20 views
8

मेरे पास कई नियंत्रक हैं: श्रेणी नियंत्रक और समाचार नियंत्रक साथ ही दोनों के लिए श्रेणी और समाचार और रिपोजिटरी के लिए डोमेन मॉडल।extbase रिपॉजिटरी findAll() परिणाम नल

NewsController में मैं (categoryController में के रूप में एक ही तरह से) इस तरह की एक dependencyInjection कार्य करें:

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

मैं एक खाली परिणाम वापस प्राप्त करें।

मेरे लिए अजीब चीज यह है कि अगर मैं श्रेणी नियंत्रक में ऐसा कर रहा हूं, तो वही कार्य आकर्षण की तरह काम करता है और डेटाबेस में सभी तत्वों को लौटाता है और यहां तक ​​कि मेरे लिए अजनबी भी है, यदि मैं $ यह करता हूं -> श्रेणी रिपोजिटरी-> findByUid (1) मुझे परिणाम के रूप में सही तत्व मिलता है।

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

अगर मैं categoryController से इस फ़ंक्शन को कॉल करें, मैं वापस तत्वों की सही मात्रा में मिलता है:

मैं भी एक परीक्षण समारोह मेरी categoryRepository को जोड़ा गया। मैं अपने newsController से फोन कर रहा हूँ अगर मैं मिल "0" वापस ...

मैं समझ नहीं है ...

मैं क्या याद आती है ??? मेरी गलती कहां है?

उत्तर

2

क्या आप सुनिश्चित हैं कि findAll() का वापसी मूल्य शून्य है?

यह हो सकता है कि आपका निर्भरता इंजेक्शन काम नहीं करता है। फिर अपवाद कुछ इस तरह होना चाहिए:

findAll() एक गैर-वस्तु पर कहा जाता है ($ this-> categoryRepository)

इसके अलावा अपने injectCategoryRepository में आप लिखते हैं $categoryRepositoryमें lowerCamelCase और एनोटेशन में में UpperCamelCase$CategoryRepository

आशा .. इस में मदद करता है

+1

ऊपरी/निचले कैमेलकेस के संकेत के लिए Thx। मुझे उम्मीद थी कि यह समाधान होगा ... यह सुनिश्चित करने के लिए मुझे गहराई से नजर आएगी कि यह गंभीर स्थानों पर नहीं है। मुझे कोई त्रुटि नहीं मिलती है, मुझे एक Tx_Extbase_Persistence_QueryResult ऑब्जेक्ट वापस मिलता है, लेकिन नतीजतन। न तो मुझे एक त्रुटि संदेश मिलता है। आपके समर्थन के लिए धन्यवाद! – kapale

+0

दूसरी संभावना पर UpperCamelCase समस्या मिली, लेकिन दुर्भाग्य से यह मेरी समस्या का समाधान नहीं किया। (सभी कैश हटाने के बाद) – kapale

11

इसने मुझे दिनों (या सप्ताह) के लिए खराब कर दिया है। StoragePid (पेज जहां अपने डेटाबेस आइटम से जुड़े होते हैं के संदर्भ में) डेटाबेस क्वेरी के लिए यह नहीं है कि अगर आप अपने TypoScript में कहीं निम्नलिखित परिभाषित नहीं करते:

plugin.tx_myextension.persistence.storagePid = 4 

अपने पृष्ठ- में इस रखो TS_Extbase_Persistence_Repository से TS और findAll विधि ठीक काम करनी चाहिए।

सप्ताह।

+0

मैं इसके लिए आपको प्यार करता हूँ! –

1

जैसा कि हेन्ड्रिक ने कहा था कि आप इसे अपने पेज-टीएस में सेट कर सकते हैं। एक और समाधान है: आप में, प्लगइन युक्त अपनी पृष्ठ सामग्री संपादित करें, Sys फ़ोल्डर का चयन करें, जिसमें आपके डीबी आइटम संग्रहीत किए जाते हैं। यह Typo3 v6 के लिए "व्यवहार" टैब के अंतर्गत पाया जाता है।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); 
} 
} 

अब पर अपने भंडार डेटाबेस से हर रिकॉर्ड खींच लेंगे से।

+0

सभी विकल्पों के लिए दस्तावेज़ देखें: https://wiki.typo3.org/Default_Orderings_and_Query_Settings_in_Repository –

संबंधित मुद्दे