• 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

Aruba Cloud - Virtual Private Server VPS
0 głosów
330 wizyt
pytanie zadane 10 czerwca 2018 w PHP przez `Krzychuu Stary wyjadacz (13,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 (36,470 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 (13,940 p.)
dziękuje, idę poczytać a potem przetestować
komentarz 12 czerwca 2018 przez `Krzychuu Stary wyjadacz (13,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 (36,470 p.)
Nie rozumiem za bardzo. Wystarczy id tego rekordu.
komentarz 12 czerwca 2018 przez `Krzychuu Stary wyjadacz (13,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ź 279 wizyt
pytanie zadane 4 stycznia 2018 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
1 odpowiedź 242 wizyt
0 głosów
0 odpowiedzi 182 wizyt
pytanie zadane 10 maja 2020 w PHP przez XiverKi Bywalec (2,050 p.)

93,335 zapytań

142,330 odpowiedzi

322,415 komentarzy

62,669 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...