Как я могу обновить данные в связанных объектах (Symfony)? - PullRequest
0 голосов
/ 17 декабря 2018

Это выдержка из моей сущности Cats:

   ....

  /**
   * @ORM\ManyToOne(targetEntity="Dogs")
   * @ORM\JoinColumn(name="type", referencedColumnName="id")
   */
  private $type;

  public function getType(): ?Dogs
  {
    return $this->type;
  }

 public function setType(?Dogs $type): self
      {
        $this->type = $type;

        return $this;
      }

А это из сущности Dogs:

    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

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

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

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

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

        return $this;
    }

Прямо сейчас type установлено на "2 ":

2 => Cats {#6214 ▼
    -id: 3
    -name: "password"
    -type: Dogs {#6211 ▼
      +__isInitialized__: true
      -id: 2
      -name: "hidden"
      -label: "hidden"
       …2
     …2}
  }

Я хочу обновить его до" 3 ":

$entity->setType(2);
$em->flush();

Но я получаю сообщение об ошибке:

Аргумент 1 пройденв App \ Entity \ Cats :: setType () должен быть экземпляром App \ Entity \ Dogs или заданной нулевой строки, которая вызывается в /Users/work/project/src/Controller/PagesController.php в строке 242

Как мне создать экземпляр сущности?

Ответы [ 2 ]

0 голосов
/ 17 декабря 2018

На самом деле, поскольку вы получили идентификатор связанной сущности, вам не нужно полностью загружать сущность из базы данных, вы можете просто передать ссылку на эту сущность.Это быстрее и не добавляет ненужных накладных расходов к вашему коду:

$dogId = 3;
$dog = $em->getReference(Dogs::class, $dogId);
$entity->setType($dog);
$em->flush();
0 голосов
/ 17 декабря 2018

Вы не можете установить тип для идентификатора собачьей сущности, но непосредственно для сущности.Вам нужно сделать что-то вроде этого:

$dog = $em->getRepository(Dog::class)->findOneById(2);
$entity->setType($dog);
$em->flush();
...