Symfony API无法将数据发送到数据库

vdzxcuhz  于 2023-02-16  发布在  其他
关注(0)|答案(1)|浏览(121)

我想创建一个用户,但用户实体连接到实体角色、地址和personInfo,但我收到personInfo_id不能为空的错误消息?我如何传入ID
我尝试了一个值,在那里我将手动传递id,但那不起作用

这是我的用户实体

<?php

namespace App\Entity;

use App\Repository\UserRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: UserRepository::class)]
class User
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column(length: 30)]
    private ?string $password = null;

    #[ORM\OneToOne(inversedBy: 'User', cascade: ['persist', 'remove'])]
    #[ORM\JoinColumn(nullable: false)]
    private ?Role $roleId = null;

    #[ORM\OneToMany(mappedBy: 'UserId', targetEntity: PersonInfo::class, orphanRemoval: true, cascade:['persist'])]
    private Collection $PersonInfoId;

    #[ORM\ManyToOne(cascade: ['persist', 'remove'])]
    #[ORM\JoinColumn(nullable: false)]
    private ?PersonInfo $personInfoId = null;

    #[ORM\ManyToOne(inversedBy: 'UserId')]
    #[ORM\JoinColumn(nullable: false)]
    private ?Address $AddressId = null;

    #[ORM\OneToMany(mappedBy: 'UserId', targetEntity: Address::class, orphanRemoval: true)]
    private Collection $UserId;

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

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

    public function getPassword(): ?string
    {
        return $this->password;
    }

    public function setPassword(string $password): self
    {
        $this->password = $password;

        return $this;
    }

    public function getRoleId(): ?Role
    {
        return $this->roleId;
    }

    public function setRoleId(Role $roleId): self
    {
        $this->roleId = $roleId;

        return $this;
    }

    /**
     * @return Collection<int, PersonInfo>
     */
    public function getPersonInfoId(): Collection
    {
        return $this->PersonInfoId;
    }

    public function addPersonInfoId(PersonInfo $personInfoId): self
    {
        if (!$this->PersonInfoId->contains($personInfoId)) {
            $this->PersonInfoId->add($personInfoId);
            $personInfoId->setUserId($this);
        }

        return $this;
    }

    public function removePersonInfoId(PersonInfo $personInfoId): self
    {
        if ($this->PersonInfoId->removeElement($personInfoId)) {
            // set the owning side to null (unless already changed)
            if ($personInfoId->getUserId() === $this) {
                $personInfoId->setUserId(null);
            }
        }

        return $this;
    }

    public function setPersonInfoId(?PersonInfo $personInfoId): self
    {
        $this->personInfoId = $personInfoId;

        return $this;
    }

    public function getAddressId(): ?Address
    {
        return $this->AddressId;
    }

    public function setAddressId(?Address $AddressId): self
    {
        $this->AddressId = $AddressId;

        return $this;
    }

    /**
     * @return Collection<int, Address>
     */
    public function getUserId(): Collection
    {
        return $this->UserId;
    }

    public function addUserId(Address $userId): self
    {
        if (!$this->UserId->contains($userId)) {
            $this->UserId->add($userId);
            $userId->setUserId($this);
        }

        return $this;
    }

    public function removeUserId(Address $userId): self
    {
        if ($this->UserId->removeElement($userId)) {
            // set the owning side to null (unless already changed)
            if ($userId->getUserId() === $this) {
                $userId->setUserId(null);
            }
        }

        return $this;
    }
}

角色实体

<?php

namespace App\Entity;

use App\Repository\RoleRepository;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: RoleRepository::class)]
class Role
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column(length: 30)]
    private ?string $name = null;

    #[ORM\OneToOne(mappedBy: 'roleId', cascade: ['persist', 'remove'])]
    private ?User $User = null;

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

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

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

        return $this;
    }

    public function getUser(): ?User
    {
        return $this->User;
    }

    public function setUser(User $User): self
    {
        // set the owning side of the relation if necessary
        if ($User->getRoleId() !== $this) {
            $User->setRoleId($this);
        }

        $this->User = $User;

        return $this;
    }
}

个人信息实体:

<?php

namespace App\Entity;

use App\Repository\PersonInfoRepository;
use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\Common\Collections\Collection;
use Doctrine\ORM\Mapping as ORM;

#[ORM\Entity(repositoryClass: PersonInfoRepository::class)]
class PersonInfo
{
    #[ORM\Id]
    #[ORM\GeneratedValue]
    #[ORM\Column]
    private ?int $id = null;

    #[ORM\Column(length: 30)]
    private ?string $name = null;

    #[ORM\Column(length: 30)]
    private ?string $email = null;

    #[ORM\Column]
    private ?int $phone_number = null;

    #[ORM\ManyToOne(inversedBy: 'PersonInfoId', cascade: ['persist'])]
    #[ORM\JoinColumn(nullable: false)]
    private ?User $UserId = null;

    #[ORM\ManyToOne(inversedBy: 'addressId')]
    #[ORM\JoinColumn(nullable: false)]
    private ?Address $addressId = null;

    #[ORM\OneToMany(mappedBy: 'personInfoId', targetEntity: ContactPersoon::class, orphanRemoval: true)]
    private Collection $personInfoId;

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

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

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

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

        return $this;
    }

    public function getEmail(): ?string
    {
        return $this->email;
    }

    public function setEmail(string $email): self
    {
        $this->email = $email;

        return $this;
    }

    public function getPhoneNumber(): ?int
    {
        return $this->phone_number;
    }

    public function setPhoneNumber(int $phone_number): self
    {
        $this->phone_number = $phone_number;

        return $this;
    }

    public function getUserId(): ?User
    {
        return $this->UserId;
    }

    public function setUserId(?User $UserId): self
    {
        $this->UserId = $UserId;

        return $this;
    }

    public function getAddressId(): ?Address
    {
        return $this->addressId;
    }

    public function setAddressId(?Address $addressId): self
    {
        $this->addressId = $addressId;

        return $this;
    }

    /**
     * @return Collection<int, ContactPersoon>
     */
    public function getPersonInfoId(): Collection
    {
        return $this->personInfoId;
    }

    public function addPersonInfoId(ContactPersoon $personInfoId): self
    {
        if (!$this->personInfoId->contains($personInfoId)) {
            $this->personInfoId->add($personInfoId);
            $personInfoId->setPersonInfoId($this);
        }

        return $this;
    }

    public function removePersonInfoId(ContactPersoon $personInfoId): self
    {
        if ($this->personInfoId->removeElement($personInfoId)) {
            // set the owning side to null (unless already changed)
            if ($personInfoId->getPersonInfoId() === $this) {
                $personInfoId->setPersonInfoId(null);
            }
        }

        return $this;
    }

 
}

这是我设计的erd,如果这可能有助于构建图片The ERD
请帮帮忙

ffx8fchx

ffx8fchx1#

class Userclass PersonInfo中,两个实体都具有nullable=false字段Map,因此在创建用户时必须传递对象。例如:

$user = new User();
$personInfo = new PersonInfo();
$user->addPersonInfoId($personInfo);   // Here argument must be object of PersonInfo instead of Id.
$em->persist($user);
$em->flush();

相关问题