Нужна помощь с Doctrine 2 Relations (inversedBy) - PullRequest
0 голосов
/ 18 августа 2011
class Affiliate
{
    /**
     * @var integer $id
     *
     * @Column(name="id", type="integer", length=4)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var Entities\AdminUser $admin_user
     *
     * @OneToOne(targetEntity="AdminUser", inversedBy="affiliate")
     */
    private $admin_user;    
}


class AdminUser
{

    /**
    * @var integer $id
    *
    * @Column(name="id", type="integer", length=4)
    * @Id
    * @GeneratedValue(strategy="IDENTITY")
    */
    private $id;

   /**
   * @var Entities\Affiliate $affiliate
   *
   * @OneToOne(targetEntity="Affiliate", mappedBy="admin_user", cascade={"persist", "remove"}, fetch="EAGER")
   */
   private $affiliate;
}



$admin_user4 = new Entities\AdminUser();

$affiliate = new Entities\Affiliate();
$admin_user4->setAffiliate($affiliate);

$this->em->persist($admin_user4);

...

mysql> select * from affiliate;
+----+---------------+
| id | admin_user_id |
+----+---------------+
|  1 |          NULL |
+----+---------------+
1 row in set (0.00 sec)

ПОЧЕМУ ЭТО НУЛЬ? ??????

Ответы [ 2 ]

1 голос
/ 21 января 2012

Попробуйте сделать что-то вроде:

$admin_user4 = new Entities\AdminUser();

$affiliate = new Entities\Affiliate();
$admin_user4->setAffiliate($affiliate);

$this->em->persist($admin_user4);

$this->em->flush();
1 голос
/ 19 августа 2011

Как выглядит setAffiliate ()?

Поскольку это обратная сторона ассоциации, она должна выглядеть примерно так:

public function setAffiliate($affiliate){
    $affiliate->admin = $this;
    $this->affiliate = $affiliate;
    return $this;
}

Ваши каскадные аннотации неэффективны, посколькуМы сделали Партнер владеющей стороной.

Таким образом, другим решением, которое может иметь или не иметь больше смысла, было бы переключение собственности на ассоциацию.

...