Re: [TYPO3-german] 1:n Relation über Controller hinzufügen (Typo3 6.2.9)

2015-03-16 Diskussionsfäden Kai Hechler

Hallo Mikel,
die set-Methode erwartet als Parameter ein Objekt vom Typ 
\TYPO3\CMS\Extbase\Persistence\ObjectStorage. Wenn ich das Model übergebe 
wird ein Fehler geworfen.

Mit der findByUid Methode hast du eigentlich vollkommen recht. Ich habe verschwiegen das ich nicht die magic function nutze, sondern mir meine eigene geschrieben habe damit die pid nicht berücksichtigt wird. 

Auch wenn die beiden Ansätze fehlgeschlagen sind, habe ich zwischen den Zeilen die Lösung gefunden. $this-leserbildRepository-update($leserbild); macht den großen Unterschied. Einfach nach der addRating Methode aufrufen und die Zurdnung funktioniert. 


Vielen Dank für deine Hilfe!


___
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Re: [TYPO3-german] 1:n Relation über Controller hinzufügen (Typo3 6.2.9)

2015-03-16 Diskussionsfäden Mikel

Hallo Kai,

danke für Deine Rückmeldung.

Ich hätte noch zwei Anregungen:

1. findByUid dürfte per default eigentlich keine pid abfragen, da die 
uid ja unique ist und somit als identifier reicht.
2. Wenn die set-Methode ein ObjectStorage erwartet, dann kannst Du das 
ObjectStorage zuerst von Deinem Leserbild abholen, das neue Rating 
hinzufügen und dann wieder setzen.

Zum Beispiel:
$newRating = new \MYVENDOR\Leserbilder\Domain\Model\Rating;
$newRating-setIp($_SERVER['REMOTE_ADDR']);
$newRating-setPid(intval($this-settings['folder']));
$leserbild = $this-leserbildRepository-findByUid($uid);
$ratings = $this-leserbild-getRatings();
$ratings-attach($newRating);
$leserbild-setRating($ratings);
$this-leserbildRepository-update($leserbild);

Voraussetzung für dieses Beispiel ist, dass die Methode getRatings im 
Model des Leserbilds existiert und ein ObjectStorage zurückgibt. Zudem 
muss die Methode setRatings ebenfalls ein ObjectStorage erwarten (und 
nicht einen einzelnen Datensatz). Dann kannst Du das neue Rating per 
attach() den vorhandenen, in einem ObjectStorage gespeicherten Ratings 
anhängen, wieder zurück an das Leserbild übergeben und dies per update 
speichern.


Mikel

Am 16.03.15 um 11:00 schrieb Kai Hechler:

Hallo Mikel,
die set-Methode erwartet als Parameter ein Objekt vom Typ 
\TYPO3\CMS\Extbase\Persistence\ObjectStorage. Wenn ich das Model 
übergebe wird ein Fehler geworfen.


Mit der findByUid Methode hast du eigentlich vollkommen recht. Ich 
habe verschwiegen das ich nicht die magic function nutze, sondern mir 
meine eigene geschrieben habe damit die pid nicht berücksichtigt wird.
Auch wenn die beiden Ansätze fehlgeschlagen sind, habe ich zwischen 
den Zeilen die Lösung gefunden. 
$this-leserbildRepository-update($leserbild); macht den großen 
Unterschied. Einfach nach der addRating Methode aufrufen und die 
Zurdnung funktioniert.

Vielen Dank für deine Hilfe!


___
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german


___
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

[TYPO3-german] 1:n Relation über Controller hinzufügen (Typo3 6.2.9)

2015-03-13 Diskussionsfäden Kai Hechler

Hallo,
ich will zu einem Datensatz eine Bewertung als 1:n Relation hinzufügen. Die 
Bewertung wird erstellt und in die DB eingetragen nur die zuordnung zum 
Datensatz funktioniert einfach nicht. Mein Code sieht wie folgt aus:

/**
 * action rate
 *
 * @return void
 */
public function rateAction() {

$newRating = new \MYVENDOR\Leserbilder\Domain\Model\Rating;
$newRating-setIp($_SERVER['REMOTE_ADDR']);
$newRating-setPid(intval($this-settings['folder']));

$objectManager = 
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\TYPO3\CMS\Extbase\Object\ObjectManager');

$ratingRepository = 
$objectManager-get('\MYVENDOR\Leserbilder\Domain\Repository\RatingRepository');
$ratingRepository-add($newRating);

$leserbildResult = 
$this-leserbildRepository-findByUid(intval($_POST['uid']));
$leserbild = $leserbildResult-getFirst();
$leserbild-addRating($newRating);


$objectManager-get('TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface')-persistAll();
	} 



Das Problem ist die Zeile  $leserbild-addRating($newRating); . Es wird kein 
Fehler geworfen, allerdings ist dem Leserbild Datensatz kein Rating zugeordnet.
___
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Re: [TYPO3-german] 1:n Relation über Controller hinzufügen (Typo3 6.2.9)

2015-03-13 Diskussionsfäden Mikel

Hallo Kai,

hat dein Model des Leserbilds nicht bereits eine Eigenschaft für ein Rating?
Dann könntest Du doch eigentlich einfach ein neues Rating erstellen und 
dies per set-Methode erstellen, oder?


So was wie

$newRating = new \MYVENDOR\Leserbilder\Domain\Model\
$newRating-setIp($_SERVER['REMOTE_ADDR']);
$newRating-setPid(intval($this-settings['folder']));

$leserbild = $this-leserbildRepository-findByUid($uid);
$leserbild-setRating($newRating);
$this-leserbildRepository-update($leserbild);
$this-persistanceManager-persistAll();

War nur ein spontaner Gedanke. Alles ungeprüft.

Was mir noch auffällt: Du holst einen Datensatz per findByUid und führst 
anschließend darauf ein getFirst aus. findByUid gibt meines Wissens 
schon direkt den entsprechenden Datensatz und kein QueryResult zurück. 
Könnte da auch der Fehler liegen?


Mikel



Am 13.03.15 um 12:03 schrieb Kai Hechler:

Hallo,
ich will zu einem Datensatz eine Bewertung als 1:n Relation 
hinzufügen. Die Bewertung wird erstellt und in die DB eingetragen nur 
die zuordnung zum Datensatz funktioniert einfach nicht. Mein Code 
sieht wie folgt aus:


/**
 * action rate
 *
 * @return void
 */
public function rateAction() {

$newRating = new \MYVENDOR\Leserbilder\Domain\Model\Rating;
$newRating-setIp($_SERVER['REMOTE_ADDR']);
$newRating-setPid(intval($this-settings['folder']));

$objectManager = 
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('\TYPO3\CMS\Extbase\Object\ObjectManager');


$ratingRepository = 
$objectManager-get('\MYVENDOR\Leserbilder\Domain\Repository\RatingRepository');

$ratingRepository-add($newRating);

$leserbildResult = 
$this-leserbildRepository-findByUid(intval($_POST['uid']));

$leserbild = $leserbildResult-getFirst();
$leserbild-addRating($newRating);

$objectManager-get('TYPO3\CMS\Extbase\Persistence\PersistenceManagerInterface')-persistAll();
}

Das Problem ist die Zeile  $leserbild-addRating($newRating); . Es 
wird kein Fehler geworfen, allerdings ist dem Leserbild Datensatz kein 
Rating zugeordnet.

___
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german


___
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german