Instantiation error 2 objects with Doctrine entities (Setter)

Asked

Viewed 80 times

1

I am not managing to make the relationship of 2 entities and the following error is appearing:

Catchable fatal error: Argument 1 passed to Clientes\Entity\Clientes::setEstado() must be an instance of Estados, instance of Clientes\Entity\Estados given, called in C:\xampp\htdocs\zend_framework\module\Clientes\src\Clientes\Controller\IndexController.php on line 34 and defined in C:\xampp\htdocs\zend_framework\module\Clientes\src\Clientes\Entity\Clientes.php on line 186

Controller

$estado = new \Clientes\Entity\Estados();
$estado->setIdFk('1');
$estado->setEstado('1');

$cliente = new \Clientes\Entity\Clientes();
$cliente->setNome('MEU NOME');

$cliente->setEstado($estado);

$em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
$em->persist($estado);

$em->persist($cliente);
$em->flush();

Entities:

 /**
 * Clientes
 *
 * @ORM\Table(name="clientes", indexes={@ORM\Index(name="fk_estado",      columns={"estado"})})
 * @ORM\Entity
 */
 class Clientes
 {
/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="IDENTITY")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="nome", type="string", length=100, nullable=true)
 */
private $nome;

/**
 * @var string
 *
 * @ORM\Column(name="sobrenome", type="string", length=150, nullable=true)
 */
private $sobrenome;

/**
 * @var string
 *
 * @ORM\Column(name="endereco", type="string", length=100, nullable=true)
 */
private $endereco;

/**
 * @var string
 *
 * @ORM\Column(name="bairro", type="string", length=80, nullable=true)
 */
private $bairro;

/**
 * @var string
 *
 * @ORM\Column(name="complemento", type="string", length=60, nullable=true)
 */
private $complemento;

/**
 * @var string
 *
 * @ORM\Column(name="cidade", type="string", length=50, nullable=true)
 */
private $cidade;

/**
 * @var string
 *
 * @ORM\Column(name="cep", type="string", length=9, nullable=true)
 */
private $cep;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="modificacao", type="datetime", nullable=true)
 */
private $modificacao;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="data", type="datetime", nullable=true)
 */
private $data;

/**
 * @var \Estados
 *
 * @ORM\ManyToOne(targetEntity="Estados")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="estado", referencedColumnName="id_fk")
 * })
 */
private $estado;
...

And

/**
 * Estados
 *
 * @ORM\Table(name="estados")
 * @ORM\Entity
 */
class Estados
{
/**
 * @var \Id
 *
 * @ORM\ManyToOne(targetEntity="Estados")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="estado", referencedColumnName="id_fk")
 * })
 */
private $idFk;

/**
 * @var string
 *
 * @ORM\Column(name="estado", type="string", length=20, nullable=true)
 */
private $estado;
  • If possible edit your question to add relevant information. Comments are usually deleted after a while.

1 answer

0

Try changing the mapping of Estados in class Clientes for:

/**
 * @var \Estados
 *
 * @ORM\ManyToOne(targetEntity="\Clientes\Entity\Estados")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="estado", referencedColumnName="id_fk")
 * })
 */
private $estado;
  • Please avoid long discussions in the comments; your talk was moved to the chat

  • http://answall.com/questions/82926/registros-sendo-inseridos-em-duas-tabelas-entre-as-entidades-com-doctrine-for

Browser other questions tagged

You are not signed in. Login or sign up in order to post.