如何在 Symfony2 中单向持久化一对一实体
Posted
技术标签:
【中文标题】如何在 Symfony2 中单向持久化一对一实体【英文标题】:How persist one to one entity unidirectionally in Symfony2 【发布时间】:2014-06-29 12:43:24 【问题描述】:我在 Symfony2 中使用 Doctrine 的两个实体有问题:
这是第一个实体:
/**
* Pedidos
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="RestCarta\Bundle\FrontendBundle\Entity\PedidosRepository")
*/
class Pedidos
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="usuario", type="string", length=100)
*/
private $usuario;
/**
* @var string
*
* @ORM\Column(name="mesa", type="string", length=3)
*/
private $mesa;
/**
* @var integer
*
* @ORM\OneToOne(targetEntity="Articulos")
* @ORM\JoinColumn(name="articulo_id", referencedColumnName="id")
*/
private $articulo;
/**
* @var string
*
* @ORM\Column(name="precio", type="decimal")
*/
private $precio;
这是第二个实体:
/**
* Articulos
*
* @ORM\Table()
* @ORM\Entity(repositoryClass="RestCarta\Bundle\FrontendBundle\Entity\ArticulosRepository")
*/
class Articulos
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="referencia", type="string", length=100)
*/
private $referencia;
/**
* @var string
*
* @ORM\Column(name="nombre", type="string", length=255)
*/
private $nombre;
/**
* @var string
*
* @ORM\Column(name="descripcion", type="string", length=255)
*/
private $descripcion;
/**
* @var string
*
* @ORM\Column(name="precio", type="decimal")
*/
private $precio;
/**
* @var string
*
* @ORM\Column(name="imagen", type="string", length=255)
*/
private $imagen;
/**
* @ORM\ManyToOne(targetEntity="Categorias", inversedBy="articulos")
* @ORM\JoinColumn(name="categoria_id", referencedColumnName="id")
*/
protected $categoria;
现在问题来了。
我怎样才能坚持一个包含一个“Articulo”的“Pedido”??
我可以读取所有“Pedido”,并且带有“Articulo”的 LEFT JOIN 工作完美,(通过 phpMyAdmin 手动插入数据)但是当我使用此代码保留更多数据时:
$em = $this->getDoctrine()->getManager();
$pedido = new Pedidos();
$pedido->setUsuario('blablabla');
$pedido->setMesa('blablabla');
$pedido->setArticulo($identi);
$pedido->setPrecio('blablabla');
$em->persist($pedido);
$em->flush();
$identi = 对应“Articulos”的id
结果是:
警告:spl_object_hash() 期望参数 1 是对象,字符串 给出 /Applications/MAMP/htdocs/RestCarta/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php 第 1388 行 500 内部服务器错误 - ContextErrorException
拜托,有人可以帮助我吗?
提前致谢
【问题讨论】:
$identi 必须是实体对象,而不仅仅是你可以使用的ID$em->getReference('YourNamespace\Articulos', $identi);
谢谢鲁菲努斯!!!完美工作!!!请回答问题,而不是评论来批准答案。
【参考方案1】:
$identi
必须是实体对象,不能只是你可以使用的ID
$em->getReference('YourNamespace\Articulos', $identi);
【讨论】:
以上是关于如何在 Symfony2 中单向持久化一对一实体的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2/Doctrine:如何从实体类中持久化一个实体?