У меня есть система с двумя таблицами и таблицей соединения. У Реуньяо много сервидоров, а у сервидоров много Реуньяо. Для этого у меня есть таблица reuniao, таблица servidor и таблица reuniaoservidor. Я хочу сохранить reuniao со многими существующими сервидорами, но я не хочу сохранять сервидор, когда reuniao сохраняется. Проблема в... Когда я пытаюсь упорствовать, доктрина воссоединения говорит мне:
"Новая сущность была обнаружена через связь 'SistemaIfnmg \ Entity \ Reuniao # servidores', которая не была настроена для каскадного сохранения операций для объекта: SistemaIfnmg \ Entity \ ReuniaoServidor @ 000000006a69473200007f33ddb737e2. Чтобы решить эту проблему явно: Eitheranly на этом неизвестном объекте или настройте каскад, сохраните эту ассоциацию в сопоставлении, например, @ManyToOne (.., cascade = {"persist"}). Если вы не можете узнать, какой объект вызывает проблему, реализуйте 'SistemaIfnmg \ Entity \ ReuniaoServidor #__ toString ( ) ', чтобы получить подсказку ".
Entyties:
Reuniao.php
namespace SistemaIfnmg\Entity;
use SistemaIfnmg\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name = "reuniao")
* @ORM\HasLifecycleCallbacks()
*/
class Reuniao
{
/**
* @ORM\Id
* @ORM\Column(type = "integer")
* @ORM\GeneratedValue(strategy = "AUTO")
*/
private $id;
/**
* @ORM\Column(type = "string", length=255)
*/
private $titulo;
/**
* @ORM\Column(type = "string", length=255)
*/
private $descricao;
/**
* @ORM\Column(type = "datetime")
*/
private $data;
/**
* @ORM\OneToMany(targetEntity = "SistemaIfnmg\Entity\ReuniaoServidor", mappedBy = "reuniaofk")
*/
private $servidores;
public function __construct(){
$this->servidores = new \Doctrine\Common\Collections\ArrayCollection();
}
/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @param int $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* @return string
*/
public function getTitulo()
{
return $this->titulo;
}
/**
* @param string $titulo
*/
public function setTitulo($titulo)
{
$this->titulo = $titulo;
}
/**
* @return string
*/
public function getDescricao()
{
return $this->descricao;
}
/**
* @param string $descricao
*/
public function setDescricao($descricao)
{
$this->descricao = $descricao;
}
/**
* @return string
*/
public function getData()
{
return $this->data;
}
/**
* @param string $data
*/
public function setData($data)
{
$this->data = $data;
}
/**
* Add servidores
* @param \SistemaIfnmg\Entity\ReuniaoServidor $servidor
* @return Reuniao
*/
public function addServidor(\SistemaIfnmg\Entity\ReuniaoServidor $servidor){
$this->servidores[] = $servidor;
}
/**
* Remove servidor
*
* @param \SistemaIfnmg\Entity\ReuniaoServidor $servidor
*/
public function removeServidor(\SistemaIfnmg\Entity\ReuniaoServidor $servidor){
$this->servidores->removeElement($servidor);
}
/**
* Get servidores
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getServidores(){
return $this->servidores;
}
}
?>
Servidor.php
<?php
namespace SistemaIfnmg\Entity;
use SistemaIfnmg\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
* @ORM\Table(name = "servidor")
*/
class Servidor
{
/**
* @ORM\Column(name = "id", type = "integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy = "IDENTITY")
* @var integer $id
*/
private $id;
/**
* @var string
*
* @ORM\Column(name = "nome", type = "string", length=255)
*/
private $nome;
/**
* @var string
*
* @ORM\Column(name = "sobrenome", type = "string", length=255)
*/
private $sobrenome;
/**
* @var string
*
* @ORM\Column(name = "cargo", type = "string", length=255)
*/
private $cargo;
/**
* @var string
*
* @ORM\Column(name = "matricula", type = "string", length=255)
*/
private $matricula;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set id
* @param int $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* Get nome
*
* @return string
*/
public function getNome()
{
return $this->nome;
}
/**
* Set nome
*
* @param string $nome
*/
public function setNome($nome)
{
$this->nome = $nome;
}
/**
* Get sobrenome
*
* @return string
*/
public function getSobrenome()
{
return $this->sobrenome;
}
/**
* Set sobrenome
* @param string $sobrenome
*/
public function setSobrenome($sobrenome)
{
$this->sobrenome = $sobrenome;
}
/**
* Get cargo
*
* @return string
*/
public function getCargo()
{
return $this->cargo;
}
/**
* Set cargo
*
* @param string $cargo
*/
public function setCargo($cargo)
{
$this->cargo = $cargo;
}
/**
* Get matricula
*
* @return string
*/
public function getMatricula()
{
return $this->matricula;
}
/**
* Set matricula
*
* @param string $matricula
*/
public function setMatricula($matricula)
{
$this->matricula = $matricula;
}
}
?>
ReuniadoServidor.php
<?php
namespace SistemaIfnmg\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* ReuniaoServidor
*
* @ORM\Table(name = "reuniaoservidor", indexes = {@ORM\Index(name = "fk_Reuniao_has_Servidor_Reuniao1_idx", columns = {"reuniaofk"}), @ORM\Index(name = "fk_Reuniao_has_Servidor_Servidor1_idx", columns= {"servidorfk"})})
* @ORM\Entity
*/
class ReuniaoServidor
{
/**
* @ORM\Id
* @ORM\Column(type = "integer")
* @ORM\GeneratedValue(strategy = "AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity = "SistemaIfnmg\Entity\Reuniao", inversedBy = "servidores", cascade = {"persist"})
* @ORM\JoinColumns({
* @ORM\JoinColumn(name = "reuniaofk", referencedColumnName = "id")
* })
*/
private $reuniaofk;
/**
* @ORM\ManyToOne(targetEntity = "SistemaIfnmg\Entity\Servidor", inversedBy = "servidores")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name = "servidorfk", referencedColumnName = "id")
* })
*/
private $servidorfk;
/**
* Get id
* @return integer
*/
public function getId()
{
return $this->id;
}
/**
* @param int $id
*/
public function setId($id)
{
$this->id = $id;
}
/**
* Get reuniaofk
* @return \SistemaIfnmg\Entity\Reuniao
*/
public function getReuniaofk()
{
return $this->reuniaofk;
}
/**
* Set reuniaofk
* @param \SistemaIfnmg\Entity\Reuniao $reuniaofk
* @return ReuniaoServidor
*/
public function setReuniaofk($reuniaofk)
{
$this->reuniaofk = $reuniaofk;
return $this;
}
/**
* Get servidorfk
* @return \SistemaIfnmg\Entity\Servidor
*/
public function getServidorfk()
{
return $this->servidorfk;
}
/**
* Set servidorfk
* @param \SistemaIfnmg\Entity\Servidor $servidorfk
* @return ReuniaoServidor
*/
public function setServidorfk($servidorfk)
{
$this->servidorfk = $servidorfk;
return $this;
}
}
?>
Давно пытаюсь исправить эту ошибку, помогите пожалуйста ?? Большое спасибо
Спасибо за ответ!! Я не хочу оставаться сервидором, только Реуньяо !! Поэтому я добавляю, что каскад сохраняется только в Реуньяо.






Вам не нужна сущность, которая присоединяет Reuniao к Servidor (сущность ReuniaoServidor), поскольку Doctrine позаботится о таблице соединения за вас. Вам просто нужно указать столбцы соединения в сопоставлении JoinTable.
В Reuniao.php измените отображение серверов на:
/**
* @ORM\ManyToMany(targetEntity = "SistemaIfnmg\Entity\Servidor")
* @ORM\JoinTable(name = "reuniao_servidor",
* joinColumns = {@ORM\JoinColumn(name = "ruuniao_id", referencedColumnName = "id")},
* inverseJoinColumns{@ORM\JoinColumn(name = "servidor_id", referencedColumnName = "id")}
* )
*/
private $servidores;
также добавьте конструктор, который инициализирует массив для коллекции
public function __construct()
{
$this->servidores = new ArrayCollection();
}
Привет, сэр. Благодарим за ответ и извиняемся за то, что ответили вам слишком долго. Проект устарел, но у меня есть ваши мысли, и он будет очень полезен для других проектов. Большое спасибо.
Без проблем, рад, что смог помочь :)
почему бы вам не добавить cascade = {"persist", "remove"}, как написано в исключении, которое вы получили