[TYPO3-german] Repository gibt NULL zurück bei mehrfacher Einbindung

Moritz Mädler mail at moritz-maedler.de
Wed Jul 18 19:56:57 CEST 2012


Hallo zusammen!

Ein kurzes Update zu dem Thema:

Ich habe mir einmal die Queries angeschaut, die bei Seitenaufruf
ausgeführt werden
und habe dabei festgestellt, dass sich diese wie folgt unterscheiden:

Query für das erste Plugin (Hauptkategorie):
---------
 SELECT  tx_mmdevfos_domain_model_type.* FROM
tx_mmdevfos_domain_model_type  WHERE tx_mmdevfos_domain_model_type.uid =
'2' AND tx_mmdevfos_domain_model_type.deleted=0 AND
tx_mmdevfos_domain_model_type.t3ver_state<=0 AND
tx_mmdevfos_domain_model_type.pid<>-1 AND
tx_mmdevfos_domain_model_type.hidden=0 AND
tx_mmdevfos_domain_model_type.starttime<=1342633680 AND
(tx_mmdevfos_domain_model_type.endtime=0 OR
tx_mmdevfos_domain_model_type.endtime>1342633680) AND
tx_mmdevfos_domain_model_type.sys_language_uid IN (0,-1) AND
tx_mmdevfos_domain_model_type.pid IN (10) LIMIT 1
---------

und für das zweite Plugin (Hauptkategorie):
---------
SELECT tx_mmdevfos_domain_model_type.* FROM tx_mmdevfos_domain_model_type
WHERE tx_mmdevfos_domain_model_type.uid = '2' AND
tx_mmdevfos_domain_model_type.deleted=0 AND
tx_mmdevfos_domain_model_type.t3ver_state<=0 AND
tx_mmdevfos_domain_model_type.pid<>-1 AND
tx_mmdevfos_domain_model_type.hidden=0 AND
tx_mmdevfos_domain_model_type.starttime<=1342632960 AND
(tx_mmdevfos_domain_model_type.endtime=0 OR
tx_mmdevfos_domain_model_type.endtime>1342632960) AND
tx_mmdevfos_domain_model_type.sys_language_uid IN (0,-1) AND
tx_mmdevfos_domain_model_type.pid IN (0) LIMIT 1
---------


Wie zu sehen, wird bei der zweiten Abfrage auf "pid IN (0)" abgefragt,
statt (wie bei der ersten)
auf "pid IN (10)". 
Die page-ID geht also verloren, was ich mir nicht erklären kann, da die
Einbinden exakt die gleiche ist.
Ist euch ähnliches bekannt bzw. kann ich einen Workarround schreiben?

Vielen Dank!

Moritz





On 16.07.12 10:28, "Moritz Mädler" <mail at moritz-maedler.de> wrote:

>Hallo zusammen!
>
>Ich bastele gerade an meiner ersten extbase-Extension die einen
>Produktkatalog abbildet.
>Zur Funktionsweise:
>Die Extension ist als FE-Plugin über das Backend einzubinden - dabei
>können die Haupt- und die Subkategorie gesetzt werden, auf deren Basis
>dann die Produkte mit ebendieser Haupt/Sub-Kategorie im FE angezeigt
>werden. Der Controller bekommt also aus dem Backend zwei DB-Ids übergeben,
>die ich dann an das TypeRepository weitergebe, um mir die dazugehörigen
>Kategoriedatensätze zurückgeben zu lassen. Diese übergebe ich dann an das
>OfferRepository, dass mir die passenden Produkte zu diesen Datensätzen
>zurückgibt.
>Das Ganze funktioniert auch soweit prima, allerdings verlangt das Design,
>dass ich das FE-Plugin [b]mehrfach pro Seite[/b] einbinde. Sobald ein
>zweites FE-Plugin auf der Seite eingebunden ist, erhalte ich (trotz im
>Backend korrekt gesetzter Haupt-/Subkategorie) folgende Exception:
>
>----------------
>PHP Catchable Fatal Error: Argument 1 passed to
>Tx_MmdevFos_Domain_Repository_OfferRepository::findFiltered() must be an
>instance of Tx_MmdevFos_Domain_Model_Type, null given,
>----------------
>
>
>Ich konnte das nun soweit nachvollziehen, dass beim zweiten Abfragen des
>TypeRepositorys NULL zurückkommt - was mir ein Rätsel ist.
>
>Ist es möglich, dass bei der ersten Abfrage das Ergebnis gecached wird und
>es somit bei der zweiten Abfrage kein Ergebnis mehr liefert?
>Gibt es eine Möglichkeit sich die im Repository ausgeführten Queries
>anzeigen zu lassen, so dass ich einmal schauen kann, was da wirklich an
>die DB geschickt wird?
>
>Vielen Dank!
>
>
>PS: Hier noch der Code des Controllers:
>-----------------
>/**
>     * action to show a filtered list
>     *
>     * @param Tx_MmdevFos_Domain_Model_Type $maintype
>     * @param Tx_MmdevFos_Domain_Model_Type $subtype
>     * @param Tx_MmdevFos_Domain_Model_Type $category
>     * @return void
>    */
>    public function filteredListAction( Tx_MmdevFos_Domain_Model_Type
>$maintype = NULL,
>                                        Tx_MmdevFos_Domain_Model_Type
>$subtype = NULL) {
>
>       // instantiate typeRepository
>       $typeRepository =
>t3lib_div::makeInstance('Tx_MmdevFos_Domain_Repository_TypeRepository');
>
>       // check if args where null - if yes try to fetch from backendconf
>       if ($maintype == NULL && $subtype == NULL) {
>//           $maintype =
>$this->typeRepository->findOneByUid((int)$this->settings['maintype']);
>//           $subtype =
>$this->typeRepository->findOneByUid((int)$this->settings['subtype']);
>           $maintype =
>$typeRepository->findOneByUid((int)$this->settings['maintype']);
>           $subtype =
>$typeRepository->findOneByUid((int)$this->settings['subtype']);
>       }
>        
>       $filteredOffers = $this->offerRepository->findFiltered($maintype,
>$subtype);
>
>       $categories = array();
>       foreach($filteredOffers as $offer) {
>           if( !in_array(array_keys($categories),
>$offer->getCategory()->getUid())){
>               $categories[$offer->getCategory()->getUid()] =
>$offer->getCategory();
>           }
>       }
>
>       $this->view->assign('categories', array_values($categories));
>       $this->view->assign('offer_count', count($filteredOffers));
>       $this->view->assign('offers', $filteredOffers);
>    }
>
> 
>
>
>_______________________________________________
>TYPO3-german mailing list
>TYPO3-german at lists.typo3.org
>http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german




More information about the TYPO3-german mailing list