[FLOW3-general] Problem With Update

"Christian Müller (FLOW3 Team)" christian.mueller at typo3.org
Tue Apr 3 10:03:34 CEST 2012


Just to wrap that up, we discussed the problems in IRC and it was just a 
bit of cleanup in Model, Controller and Template needed.

If you have further questions come back here or in the IRC channel.

Cheers,
Christian


On 02/04/12 15:11, daniel andrew wrote:
> Hello,
>
> I have a problem with update in flow3. Basicly i have 2 tables in MySql.
> The first table called translatiounit and it has fields: translationsource,
> translationkey, translationpackage. The second table called
> translationtarget and it has fields: translationtarget,
> translationlanguage, translationapproval, comment, translationunit.
>
> The problem is, i have to update those fields from different table in 1
> form. How to do that? should i create new method in the repository or is
> there any other better way to do that?  this is my code in controller to do
> update:
>
> /**
>   * create action
>   * @param \Somea\Translation\Domain\Model\TranslationUnit $unit A new unit
> to add
>           * @param \Somea\Translation\Domain\Model\TranslationPackage
> $package A new Package to add
>           * @param \Somea\Translation\Domain\Model\TranslationLanguage
> $language A new Language to add
>           * @param string $translationTarget
>           * @param string $translationApproval
>           * @param string $comment
>   * @return void
>   */
> public function updateAction(TranslationUnit $unit, TranslationPackage
> $package, TranslationLanguage $language, $translationTarget,
> $translationApproval, $comment) {
>                  $this->translationUnitRepository->update($unit);
>                  $targetObject  = new Translationtarget();
>                  $targetObject->setTranslationTarget($translationTarget);
>                  $targetObject->setTranslationApproval($translationApproval);
>                  $targetObject->setComment($comment);
>                  $targetObject->setTranslationLanguage($language);
>                  $targetObject->setTranslationUnit($unit);
>                  $this->translationTargetRepository->update($targetObject);
>
> $this->redirect('index','TranslationUnit','Somea.Translation',array('language'
> =>  $language, 'package' =>  $package));
> }
>
> and this is my model:
>
>     - the translationunit model:
>
>      /*
>     *
>   * This script belongs to the FLOW3 package "Somea.Translation".          *
>   *                                                                        *
>   *                                                                        */
>
> use TYPO3\FLOW3\Annotations as FLOW3;
> use Doctrine\ORM\Mapping as ORM;
>
> /**
>   * A Translation unit
>   *
>   * @FLOW3\Scope("prototype")
>   * @FLOW3\Entity
>   */
> class TranslationUnit {
>
> /**
>   * The translationkey
>   * @var string
>   */
> protected $translationKey;
>
> /**
>   * The translationsource
>   * @var string
>   */
> protected $translationSource;
>
>
> /**
>   * The translationpackage
>   * @var \Somea\Translation\Domain\Model\TranslationPackage
>           * @ORM\ManyToOne(inversedBy="translationUnit")
>   */
> protected $translationPackage;
>
>
>          /** The flow3_persistence_identifier
>           *
>           * @var string
>           * @ORM\Id
>           * @ORM\Column(name="flow3_persistence_identifier", type="string",
> length=40)
>           */
>          protected $FLOW3_Persistence_Identifier;
>
>
> /**
>   * Get the Translation unit's key
>   *
>   * @return string The Translation unit's key
>   */
> public function getTranslationKey() {
> return $this->translationKey;
> }
>
> /**
>   * Sets this Translation unit's key
>   *
>   * @param string $translationKey The Translation unit's key
>   * @return void
>   */
> public function setTranslationKey($translationKey) {
> $this->translationKey = $translationKey;
> }
>
> /**
>   * Get the Translation unit's source
>   *
>   * @return string The Translation unit's source
>   */
> public function getTranslationSource() {
> return $this->translationSource;
> }
>
> /**
>   * Sets this Translation unit's source
>   *
>   * @param string $source The Translation unit's source
>   * @return void
>   */
> public function setTranslationSource($translationSource) {
> $this->translationSource = $translationSource;
> }
>
>
>
>
> /**
>   * Get the Translation unit's translationpackage
>   *
>   * @return \Somea\Translation\Domain\Model\TranslationPackage The
> Translation unit's translationpackage
>   */
> public function getTranslationPackage() {
> return $this->translationPackage;
> }
>
> /**
>   * Sets this Translation unit's translationpackage
>   *
>   * @param \Somea\Translation\Domain\Model\TranslationPackage
> $translationpackage The Translation unit's translationpackage
>   * @return void
>   */
> public function
> setTranslationPackage(\Somea\Translation\Domain\Model\TranslationPackage
> $translationPackage) {
> $this->translationPackage = $translationPackage;
> }
>
> }
>
>
> -and translationtarget model:
>   /*                                                                        *
>   * This script belongs to the FLOW3 package "Somea.Translation".          *
>   *                                                                        *
>   *                                                                        */
>
> use TYPO3\FLOW3\Annotations as FLOW3;
> use Doctrine\ORM\Mapping as ORM;
>
> /**
>   * A Translation target
>   *
>   * @FLOW3\Scope("prototype")
>   * @FLOW3\Entity
>   */
> class TranslationTarget {
>
>          /**
>   * The translation target
>   * @var string
>   */
> protected $translationTarget;
>
>          /**
>   * The translation approval
>   * @var string
>   */
> protected $translationApproval;
>
>          /**
>   * The translation comment
>   * @var string
>   */
> protected $comment;
>
>          /**
>   * The translationlanguage
>   * @var \Somea\Translation\Domain\Model\TranslationLanguage
>           * @ORM\ManyToOne(inversedBy="translationTarget")
>   */
> protected $translationLanguage;
>
>          /**
>   * The translationlanguage
>   * @var \Somea\Translation\Domain\Model\TranslationUnit
>           * @ORM\ManyToOne(inversedBy="translationTarget")
>   */
> protected $translationUnit;
>
>          /**
>   * Get the Translation target's target
>   *
>   * @return string The Translation target's target
>   */
> public function getTranslationTarget() {
> return $this->translationTarget;
> }
>
> /**
>   * Sets this Translation target's target
>   *
>   * @param string $translationTarget The Translation target's target
>   * @return void
>   */
> public function setTranslationTarget($translationTarget) {
> $this->translationTarget = $translationTarget;
> }
>
>
>
>          /**
>   * Get the Translation target's approval
>   *
>   * @return string The Translation target's approval
>   */
> public function getTranslationApproval() {
> return $this->translationApproval;
> }
>
> /**
>   * Sets this Translation target's approval
>   *
>   * @param string $translationApproval The Translation target's approval
>   * @return void
>   */
> public function setTranslationApproval($translationApproval) {
> $this->translationApproval = $translationApproval;
> }
>
>           /**
>   * Get the Translation target's comment
>   *
>   * @return string The Translation target's comment
>   */
> public function getComment() {
> return $this->comment;
> }
>
> /**
>   * Sets this Translation target's comment
>   *
>   * @param string $comment The Translation target's comment
>   * @return void
>   */
> public function setComment($comment) {
> $this->comment = $comment;
> }
>
>
> /**
>   * Get the Translation target's translationlanguage
>   *
>   * @return \Somea\Translation\Domain\Model\TranslationLanguage The
> Translation unit's translationlanguage
>   */
> public function getTranslationLanguage() {
> return $this->translationLanguage;
> }
>
> /**
>   * Sets this Translation target's translationlanguage
>   *
>   * @param \Somea\Translation\Domain\Model\TranslationLanguage
> $translationlanguage The Translation unit's translationlanguage
>   * @return void
>   */
> public function
> setTranslationLanguage(\Somea\Translation\Domain\Model\TranslationLanguage
> $translationLanguage) {
> $this->translationLanguage = $translationLanguage;
> }
>
>          /**
>   * Get the Translation target's translationunit
>   *
>   * @return \Somea\Translation\Domain\Model\TranslationUnit The Translation
> unit's translationunit
>   */
> public function getTranslationUnit() {
> return $this->translationUnit;
> }
>
> /**
>   * Sets this Translation target's translationlanguage
>   *
>   * @param \Somea\Translation\Domain\Model\TranslationUnit $translationUnit
> The Translation unit's translationunit
>   * @return void
>   */
> public function
> setTranslationUnit(\Somea\Translation\Domain\Model\TranslationUnit
> $translationUnit) {
> $this->translationUnit = $translationUnit;
> }
>
>
>
> }
>
>
>
> if i execute this action, it will throw an error: *: The object of type
> "TranslationTarget" given to update must be persisted already, but is new*
>
> Please let me know if there is any questions about my explanation or you
> need something else.
>
> Best Regards,
>
> Daniel



More information about the FLOW3-general mailing list