2014-03-01 24 views
1

我定義如下一個ManyToMany關係:未定義的索引「order」,映射錯誤?

OrderHasMedia.php

/** 
* @ORM\Entity 
* @ORM\Table(name="order_has_media__media") 
*/ 
class OrderHasMedia { 

    /** 
    * @ORM\Id 
    * @ORM\ManyToOne(targetEntity="PL\OrderBundle\Entity\Order", inversedBy="order_document", cascade={"all"}) 
    */ 
    protected $order; 

    /** 
    * @ORM\Id 
    * @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media", inversedBy="order_document", cascade={"all"}) 
    */ 
    protected $media; 

} 

Order.php

/** 
* @ORM\Entity 
* @ORM\Table(name="tb_order") 
* @Gedmo\Loggable 
*/ 
class Order { 

    /** 
    * @ORM\OneToMany(targetEntity="PL\OrderBundle\Entity\OrderHasMedia", mappedBy="order" , cascade={"all"}) 
    */ 
    protected $order_document; 

} 

Media.php

class Media extends BaseMedia { 

    /** 
    * @var Collection 
    * @ORM\OneToMany(targetEntity="PL\OrderBundle\Entity\OrderHasMedia", mappedBy="media", cascade={"all"}) 
    * 
    */ 
    protected $order_document; 

} 

如果我嘗試添加一個新的訂單我得到這個錯誤:

ContextErrorException: Notice: Undefined index: id in /var/www/html/apps/portal_de_logistica/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 685

in /var/www/html/apps/portal_de_logistica/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 685 
at ErrorHandler->handle('8', 'Undefined index: id', '/var/www/html/apps/portal_de_logistica/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php', '685', array('entity' => object(OrderHasMedia), 'result' => array(), 'uow' => object(UnitOfWork), 'versioned' => null, 'field' => 'order', 'change' => array(null, object(Order)), 'newVal' => object(Order), 'assoc' => array('fieldName' => 'order', 'id' => true, 'joinColumns' => array(array('name' => 'order_id', 'referencedColumnName' => 'id')), 'cascade' => array('remove', 'persist', 'refresh', 'merge', 'detach'), 'inversedBy' => 'order_document', 'targetEntity' => 'PL\OrderBundle\Entity\Order', 'fetch' => '2', 'type' => '2', 'mappedBy' => null, 'isOwningSide' => true, 'sourceEntity' => 'PL\OrderBundle\Entity\OrderHasMedia', 'isCascadeRemove' => true, 'isCascadePersist' => true, 'isCascadeRefresh' => true, 'isCascadeMerge' => true, 'isCascadeDetach' => true, 'sourceToTargetKeyColumns' => array('order_id' => 'id'), 'joinColumnFieldNames' => array('order_id' => 'order_id'), 'targetToSourceKeyColumns' => array('id' => 'order_id'), 'orphanRemoval' => false), 'oid' => '000000005c17f96200007f239e737d4c', 'newValId' => array('no_order' => '3424'), 'targetClass' => object(ClassMetadata), 'owningTable' => 'order_has_media__media', 'joinColumn' => array('name' => 'order_id', 'referencedColumnName' => 'id'), 'sourceColumn' => 'order_id', 'targetColumn' => 'id', 'quotedColumn' => 'order_id')) in /var/www/html/apps/portal_de_logistica/vendor/doctrine/orm/lib/Doctrine/ORM/Persisters/BasicEntityPersister.php line 685 

哪裏錯誤?我的映射有什麼問題?

+0

你是否缺少Order實體中的$ id? –

+0

@abbiya不,它被定義爲它不會調用'$ id',而是調用'$ no_order'。這裏是我定義的定義 */ protected $ no_order;'' – ReynierPM

回答

6

經過數小時的頭痛,我終於找到了我的錯誤所在,我想分享以防其他人有同樣的問題。解決的辦法是增加@ORM\JoinColumn()到註解,所以我的代碼,現在,只爲OrderHasMedia實體如下:

/** 
* @var Order 
* @ORM\Id 
* @ORM\ManyToOne(targetEntity="PL\OrderBundle\Entity\Order", inversedBy="order_document", cascade={"all"}) 
* @ORM\JoinColumn(name="order_no_order", referencedColumnName="no_order") 
*/ 
protected $order; 

/** 
* @var Media 
* @ORM\Id 
* @ORM\ManyToOne(targetEntity="Application\Sonata\MediaBundle\Entity\Media", inversedBy="order_document", cascade={"all"}) 
* @ORM\JoinColumn(name="media__media_id", referencedColumnName="id") 
*/ 
protected $media; 

解決該問題。希望這會幫助其他人

+0

你爲我節省了很多時間。謝謝。我的問題是「referencedColumnName」部分。 – bakytn