---
title: "Repository ruft ungefragt falsche Methode(n) auf."
url: "https://www.typo3.net/d/107687-repository-ruft-ungefragt-falsche-methoden-auf"
source: "typo3.net"
tags: ["Extensions","Extbase","Frage"]
created: "2011-10-10"
last_reply: "2011-10-24"
replies: 1
solved: false
page: 1
pages: 1
lang: "de"
---

# Repository ruft ungefragt falsche Methode(n) auf.

Extensions › Extbase · 1 Antwort · gestartet 2011-10-10

## Eröffnungsbeitrag

**tobla** · 2011-10-10 · [Beitrag #1](https://www.typo3.net/d/107687-repository-ruft-ungefragt-falsche-methoden-auf/1)

Hallo zusammen

Ich hab einen ziemlich verzwickten Fall. Hoffe, ihr könnt mir weiterhelfen.
**Situationsbeschrieb**
Ich hab ein Repository für meine 'Entry'-Objekte. Entry besitzt unter Anderem die Attribute 'category', 'street', 'streetNumber', 'postcode', 'city', 'latitude' und 'longitude'.

```php
class Tx_"MyExtension"_Domain_Repository_EntryRepository extends Tx_Extbase_Persistence_Repository {
```

Das Repository besitzt zwei methoden:

```php
public function findByProperties(Tx_"MyExtension"_Domain_Model_EntryCategory $category = NULL,$name ="", $street ="", $streetNumber ="", $postcode ="", $city="",$includeSubCategories = FALSE) { ... }
```

```php
public function findByCoordinates($latMin = 46.04, $latMax = 46.86, $longMin = 7.3085, $longMax = 7.5715) { ... }
```

'findByProperties' gibt alle Entry Objekte zurück, die den angegebenen Parametern entsprechen. 'findByCoordinates' sollte alle Objekte zurückliefern, deren Koordinaten zwischen den min/Max werten liegen (vollständigen Code siehe unten).

Verwendet werden die beiden Methoden im 'SearchController'. Die action 'searchEntryAction' ruft

```php
$this->view->assign('entries',$this->entryRepository->findByProperties($category,$searchValues['name'], $searchValues['street'], $searchValues['streetNumber'], $searchValues['postcode'], $searchValues['city'],true));
```

mit den Parametern aus dem Suchformular auf. Dies funktioniert soweit korrekt. Auch das SQL Statement stimmt mit der Anfrage überein. (Um das SQL Statement sichtbar zu machen, hab ich in der 'Typo3DbBackend.php' der Methode 'replacePlaceholders' ein 'var_dump($sqlString);' ergänzt - Ich weiss, das ist unschön, aber die einzige Methode, Extbase zum Reden zu bringen...).

**Nun das Problem:**
Im 'SearchController' gibt es noch eine Methode 'searchPlaceAction', die

```php
$this->view->assign('entries',$this->entryRepository->findByCoordinates($latMin,$latMax,$lngMin,$lngMax));
```

ausführt. Dabei passiert was ganz komisches: Das 'EntryRepository' ruft 'findByCoordinates' auf, führt den Code in der Methode aus (var_dumps alle i.o.), führt die Datenbankabfrage jedoch nicht aus und ruft 'findByProperties' auf (logischerweise mit leeren Parametern) und gibt entsprechend alle 'Entry' Objekte aus.

Kommentieren ich die Methode 'findByCoordinates' aus, so gibt Extbase beim Ausführen von

```php
$this->view->assign('entries',$this->entryRepository->findByCoordinates($latMin,$latMax,$lngMin,$lngMax));
```

keinen Kommentar aus, Kommentiere ich jedoch 'findByProperties' aus und führe den gleichen Befehl aus, so wirft Extbase eine Exception.

Extbase ruft hier also aus irgend einem Grund die falsche Methode auf. #angry#
Sieht jemand von euch hier den Wald unter all den Bäumen??

**Code**

```php
  public function findByCoordinates($latMin = 46.04, $latMax = 46.86, $longMin = 7.3085, $longMax = 7.5715) {
    
   	var_dump('call: findByCoordinates');
 	    	
    	$query = $this->createQuery();
       	
		$querySearch = $query->logicalAnd(
			$query->logicalAnd(
				$query->greaterThan('latitude',$latMin),
				$query->lessThan('latitude',$latMax)
			),
			$query->logicalAnd(
				$query->greaterThan('longitude',$longMin),
				$query->lessThan('longitude',$longMax)
			)
		);
       	
        $queryMatch = $query->matching($querySearch);  
    	return $queryMatch->execute();
    }
```

```php
   public function findByProperties(Tx_"MyExtension"_Domain_Model_EntryCategory $category = NULL,$name ="", $street ="", $streetNumber ="", $postcode ="", $city="",$includeSubCategories = FALSE) {

   	var_dump('call: findByProperties');
    	$query = $this->createQuery();
    	
       	$querySearch = $query->logicalAnd(
		$query->logicalAnd(
			$query->logicalAnd(
				$query->like('name','%'.$name.'%'),
				$query->like('street','%'.$street.'%')
			)
		),
		$query->logicalAnd(
			$query->logicalAnd(
				$query->like('street_number','%'.$streetNumber.'%'),
				$query->like('postcode','%'.$postcode.'%')
			),
			$query->like('city','%'.$city.'%')
		)
	);
				
	if($category) {
		$queryCategory = $query->equals('category', $category);
		
		if($includeSubCategories) {
			
			$subCategories = $category->getSubCategories();
			
            		foreach($subCategories as $subCategory) {
            			$queryCategory = $query->logicalOR(
            				$queryCategory,
            				$query->equals('category', $subCategory)
				);
            		}	
            	}
         
            	$querySearch = $query->logicalAnd(
            		$queryCategory,
            		$querySearch
           	);
        }
       	
        $queryMatch = $query->matching($querySearch);    	    	
    	return $queryMatch->execute();
    }
```

## Antworten

### [#2](https://www.typo3.net/d/107687-repository-ruft-ungefragt-falsche-methoden-auf/2) · tobla · 2011-10-24

Ich hab's gefunden. Manchmal sieht man wirklich den Wald vor lauter Bäumen nicht. Ich hab auf einer Seite zwei Plugins eingebunden und nicht beachtet, dass beide eine Datenbankabfrage machen. entsprechend wird von Beiden 'var_dump($sqlString);' aufgerufen. Dies erweckt den Eindruck, das eine Plugin rufe ungefragt eine Datenbankabfrage ab.

Der Grund für die leere Rückgabe der findByCoordinates-Methode lag an einem Berechnungsfehler der Koordinaten.

---

Quelle: „Repository ruft ungefragt falsche Methode(n) auf.“, typo3.net, https://www.typo3.net/d/107687-repository-ruft-ungefragt-falsche-methoden-auf
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
