2016-07-13 36 views
1

Also versuche ich meine erste Erweiterung mit Typo3 einzurichten und ich kämpfe sehr. Ich möchte eine Erweiterung einrichten, die Reklamationen von Kunden behandelt.Erhalte UID des Objekts nach dem Hinzufügen zum Repository

Nach dem Einreichen der Eingabewerte werde ich den neuen Kunden in der Datenbank speichern und direkt nach diesem Schritt werde ich es aus der Datenbank abrufen, um zu sehen, welche UID er hat, um die UID vom Kunden in der Reklamation zu speichern .

So wan't i die aktuelle $customer-variable mit

$customer = $this->customerRepository->findByName($name); 

Das zurückgegebene Ergebnis außer Kraft zu setzen ist nicht wirklich ein Objekt von Kunden selbst var_dump sagt es ein kunden Objekt ist. Ich kann die Funktion

$customer->getUid() 

nicht aufrufen, um die aktuelle UID dieses neuen Kunden zu erhalten. Aber ich brauche die UID des Kunden in meinem Reklamationsobjekt - wie mache ich das?

Nächstes Problem: jede Abfrage i auf den db tun würde wie

->findAll(), findByIdentifier($identifier) 

ist null.

Ich weiß nicht warum. Es scheint, dass er das storagePid nicht finden kann, aber ich habe mein TypoScript korrekt eingerichtet.

Ich kann nur eine Abfrage, wenn ich

$query->getQuerySettings()->setRespectStoragePage(FALSE); 

irgendwelche Ideen hinzufügen, wo der Hund in diesem Fall begraben liegt?

Vielen Dank und sorry für mein schlechtes Englisch: P

+0

Bitte teilen Sie "Nächstes Problem" auf eine separate Frage bc. es ist nicht verwandt. – lorenz

Antwort

5

Ihre erste Frage ist schwer, ohne weitere Details zu beantworten. Was ist die Beziehung zwischen einem Kunden und Reklamationen? Wenn ein Kunde mehrere Reklamationen haben kann, wäre es gut, eine 1: n-Beziehung zwischen Kunden und Reklamationen zu haben. In diesem Fall können Sie einfach $customer->addReclamation($reclamation) tun und müssen nicht auf Benutzer-UIDs achten.

Wie bei Ihrem Repository-Aufruf besteht das Problem darin, dass Ihr Aufruf ein QueryResult erhält, das alle übereinstimmenden Objekte enthält. Wenn name wirklich eine einzigartige Eigenschaft ist, können Sie

$customer = $this->customerRepository->findOneByName($name); 

tun dies für alle Kunden mit Namen sucht gleich $name (was sein sollte nur) und gibt die ersten, so dass Sie wieder ein Customer Objekt zu erhalten.

Aber das ist nicht wirklich notwendig, auch: Wenn Sie alle Änderungen bleiben auch nach dem Kunden hinzufügen, können Sie seine UID erhalten:

$this->customerRepository->add($customer); 
$this->persistenceManager->persistAll(); 
// Returns the customer uid 
$customerUid = $customer->getUid(); 

Die PersistenceManager kann wie folgt injiziert werden:

/** 
* @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager 
* @inject 
*/ 
protected $persistenceManager;