如何在Symfony2中单向保持一对一实体

时间:2014-06-29 12:43:25

标签: symfony orm doctrine-orm relationship

我在使用Doctrine的Symfony2中遇到两个实体的问题:

这是第一个实体:

    /**
 * 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;

现在问题。

我如何坚持一个" Pedido"包含一个" Articulo" ??

我可以阅读所有" Pedido"和#34; 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为object,string   给定的   /Applications/MAMP/htdocs/RestCarta/vendor/doctrine/orm/lib/Doctrine/ORM/UnitOfWork.php   line 1388 500内部服务器错误 - ContextErrorException

拜托,有人可以帮帮我吗?

先谢谢

1 个答案:

答案 0 :(得分:1)

$identi必须是实体对象,而不仅仅是您可以使用的ID

$em->getReference('YourNamespace\Articulos', $identi);