【问题标题】:How persist one to one entity unidirectionally in Symfony2如何在 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);
  • 谢谢鲁菲努斯!!!完美工作!!!请回答问题,而不是评论来批准答案。

标签: symfony orm doctrine-orm relationship


【解决方案1】:

$identi必须是实体对象,不能只是你可以使用的ID

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 2011-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多