• 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

VPS Starter 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ź 242 wizyt
pytanie zadane 4 stycznia 2018 w PHP przez Kacper Duda Obywatel (1,970 p.)
0 głosów
1 odpowiedź 185 wizyt
0 głosów
0 odpowiedzi 151 wizyt
pytanie zadane 10 maja 2020 w PHP przez XiverKi Obywatel (1,920 p.)

92,452 zapytań

141,262 odpowiedzi

319,081 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...