• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Symfony jak edytować rekord powiązany relacją z inna tabelą Doctrine

0 głosów
104 wizyt
pytanie zadane 10 czerwca 2018 w PHP, Symfony, Zend przez `Krzychuu Stary wyjadacz (12,940 p.)
edycja 10 czerwca 2018 przez `Krzychuu

Witam

Mam stworzoną tabelę app.users i app.position, z dodaniem rekordu nie miałem problemu ale z edycją istniejącego rekordu mam problem, szczerze to nie wiem nawet jak ugryźć ten temat, relacja jest od users Many To One a od strony position One To Many

 

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use App\Entity\Permission;

/**
 * @ORM\Table(name="app_users")
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User implements UserInterface, \Serializable
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Position", inversedBy="users")
     * @ORM\JoinColumn(nullable=false)
     */
    private $position;

    /**
     * @ORM\ManyToOne(targetEntity="App\Entity\Permission", inversedBy="users")
     * @ORM\JoinColumn(nullable=false)
     */
    private $permission;

    /**
     * @ORM\Column(type="string", length=25, unique=true)
     */
    private $username;

    /**
     * @ORM\Column(type="string", length=64)
     */
    private $password;

    /**
     * @ORM\Column(type="string", length=254, unique=true)
     */
    private $email;

    /**
     * @ORM\Column(name="first_name", type="string", length=50)
     */
    private $firstName;

    /**
     * @ORM\Column(name="last_name", type="string", length=100)
     */
    private $lastName;

    public function getId()
    {
        return $this->id;
    }

    public function getPosition(): ?Position
    {
        return $this->position;
    }

    public function setPosition(?Position $position): self
    {
        $this->position = $position;

        return $this;
    }

    public function getPermission(): ?Permission
    {
        return $this->permission;
    }

    public function setPermission(?Permission $permission): self
    {
        $this->permission = $permission;

        return $this;
    }

    /**
     * @return mixed
     */
    public function getUsername()
    {
        return $this->username;
    }

    /**
     * @param mixed $username
     */
    public function setUsername($username): void
    {
        $this->username = $username;
    }

    /**
     * @return mixed
     */
    public function getPassword()
    {
        return $this->password;
    }

    /**
     * @param mixed $password
     */
    public function setPassword($password): void
    {
        $this->password = $password;
    }

    /**
     * @return mixed
     */
    public function getEmail()
    {
        return $this->email;
    }

    /**
     * @param mixed $email
     */
    public function setEmail($email): void
    {
        $this->email = $email;
    }

    /**
     * @return mixed
     */
    public function getFirstName()
    {
        return $this->firstName;
    }

    /**
     * @param mixed $firstName
     */
    public function setFirstName($firstName): void
    {
        $this->firstName = $firstName;
    }

    /**
     * @return mixed
     */
    public function getLastName()
    {
        return $this->lastName;
    }

    /**
     * @param mixed $lastName
     */
    public function setLastName($lastName): void
    {
        $this->lastName = $lastName;
    }

    public function getRoles()
    {
        return array('ROLE_'.$this->getPermission()->getName());
    }

    public function setRoles($role)
    {
        $this->permission = $role;
    }

    public function getSalt()
    {
        // TODO: Implement getSalt() method.
    }

    public function eraseCredentials()
    {
    }

    /** @see \Serializable::serialize() */
    public function serialize()
    {
        return serialize(array(
            $this->id,
            $this->username,
            $this->password,
            // see section on salt below
            // $this->salt,
        ));
    }

    /** @see \Serializable::unserialize() */
    public function unserialize($serialized)
    {
        list (
            $this->id,
            $this->username,
            $this->password,
            // see section on salt below
            // $this->salt
            ) = unserialize($serialized, ['allowed_classes' => false]);
    }
}
<?php

namespace App\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="app_position")
 * @ORM\Entity(repositoryClass="App\Repository\PositionRepository")
 */
class Position
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=40)
     */
    private $name;

    /**
     * @ORM\OneToMany(targetEntity="App\Entity\User", mappedBy="position")
     */
    private $users;

    public function __construct()
    {
        $this->users = new ArrayCollection();
    }

    public function getId()
    {
        return $this->id;
    }

    public function getName(): ?string
    {
        return $this->name;
    }

    public function setName(string $name): self
    {
        $this->name = $name;

        return $this;
    }

    /**
     * @return Collection|User[]
     */
    public function getUsers(): Collection
    {
        return $this->users;
    }

    public function addUser(User $user): self
    {
        if (!$this->users->contains($user)) {
            $this->users[] = $user;
            $user->setPosition($this);
        }

        return $this;
    }

    public function removeUser(User $user): self
    {
        if ($this->users->contains($user)) {
            $this->users->removeElement($user);
            // set the owning side to null (unless already changed)
            if ($user->getPosition() === $this) {
                $user->setPosition(null);
            }
        }

        return $this;
    }
}

 

1 odpowiedź

+1 głos
odpowiedź 10 czerwca 2018 przez Bosswell Nałogowiec (32,770 p.)
wybrane 10 czerwca 2018 przez `Krzychuu
 
Najlepsza

Przykładowa akcja edycji

public function editUserAction(int $id) 
{
   $em = $this->getDoctrine()->getManager();
   $user = $em->getRepository('AppBundle:User')->find($id);

   $form = $this->createForm(UserType::class, $user);
   $form->handleRequest($request);

   if ($form->isSubmitted() && $form->isValid()) {
         $em->persist($user);
         $em->flush();

         return $this->redirect('powodzenie.html.twig');
   }

   return $this->render('plik_z_formularzem.html.twig', [
        'form'   =>   $form->createView();
   ]);
}

Oczywiście $id przesyłasz jako parametr. Wcześniej jednak musisz utworzyć UserType. Przez konsole możesz to zrobić za pomocą polecenia 'php bin/console doctrine:generate:form' lub w Symfony 4.* przy użyciu makera 'php bin/console make:form'. W formularzu w builderze budujesz odpowiednie pola (poszukaj w dokumentacji). Dla relacji ManyToOne masz coś takiego jak CollectionType. Tu masz przykład i użycie https://symfony.com/doc/current/form/form_collections.html

komentarz 10 czerwca 2018 przez `Krzychuu Stary wyjadacz (12,940 p.)
dziękuje, idę poczytać a potem przetestować
komentarz 12 czerwca 2018 przez `Krzychuu Stary wyjadacz (12,940 p.)
Poczytałem trochę o tym Form Collections, ale chodziło mi bardziej że ja nie wiem w jaki sposób edytować rekord jakie użyć funkcje doctrine żeby zaktualizować rekord który jest powiązany relacją.
komentarz 12 czerwca 2018 przez Bosswell Nałogowiec (32,770 p.)
Nie rozumiem za bardzo. Wystarczy id tego rekordu.
komentarz 12 czerwca 2018 przez `Krzychuu Stary wyjadacz (12,940 p.)
robię dokładnie tak jak jest opisana edycja rekordu stąd: https://symfony.com/doc/current/doctrine.html#updating-an-object i dodaje np $user->setPosition() i wyskakuje błąd że nie jest dodany odpowiedni parametr, i nie mogę zrobić update dla kolumny która jest połączona relacją Many To One

Podobne pytania

0 głosów
1 odpowiedź 101 wizyt
pytanie zadane 4 stycznia 2018 w PHP, Symfony, Zend przez Kacper Duda Obywatel (1,970 p.)
0 głosów
1 odpowiedź 647 wizyt
pytanie zadane 2 czerwca 2018 w PHP, Symfony, Zend przez `Krzychuu Stary wyjadacz (12,940 p.)
0 głosów
0 odpowiedzi 20 wizyt
pytanie zadane 7 kwietnia w PHP, Symfony, Zend przez hiper007 Stary wyjadacz (10,880 p.)
Porady nie od parady
Zadając pytanie postaraj się o odpowiedni tytuł, kategorię oraz tagi.Tagi

66,507 zapytań

113,271 odpowiedzi

239,885 komentarzy

46,644 pasjonatów

Przeglądających: 297
Pasjonatów: 16 Gości: 281

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...