• 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

Object Storage Arubacloud
0 głosów
280 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ź 246 wizyt
pytanie zadane 4 stycznia 2018 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
1 odpowiedź 186 wizyt
0 głosów
0 odpowiedzi 153 wizyt
pytanie zadane 10 maja 2020 w PHP przez XiverKi Bywalec (2,050 p.)

92,555 zapytań

141,404 odpowiedzi

319,557 komentarzy

61,940 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...