Что не так с ассоциацией сущностей doctrine2 - PullRequest
4 голосов
/ 18 марта 2012

Elloo, у меня есть две сущности доктрины, и я пытаюсь выполнить левое соединение, однако я получаю сообщение "Ошибка: класс GR \ Entity \ AccountEvents не имеет ассоциации с именем Accounts". я смотрел на другие решения на stackoverflow, но ни одно не помогло.

вот мой код

<?php
namespace GR\Entity;
/**
 * 
 * @Table(name="accounts")
 * @Entity
 */
class Accounts
{
    /**
     *
     * @var integer $id
     * @Column(name="id", type="integer",nullable=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @Column(type="string",length=255,nullable=false)
     * @var string
     */
    private $name;

    /**
     * @Column(type="string",length=255,nullable=false)
     * @var string
     */
    private $email;

    /**
     * @Column(type="string",length=255,nullable=false)
     * @var string
     */
    private $password;

    /**
     * @Column(type="datetime",nullable=false)
     * @var datetime
     */
    private $created_at;

    /**
     * @OneToMany(targetEntity="AccountEvents", mappedBy="Accounts") 
     */ 
    private $accountevents;  

    public function __get($property)
    {
        return $this->$property;
    }

    public function __set($property,$value)
    {
        $this->$property = $value;
    }
}

.. и

<?php
namespace GR\Entity;
/**
 * 
 * @Table(name="account_events")
 * @Entity
 */
class AccountEvents
{
    /**
     *
     * @var integer $id
     * @Column(name="id", type="integer",nullable=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
    private $id;


    /**
      * @var Accounts $accounts
      *
      * @Column(name="account_id", type="integer", nullable=false)
      * @ManyToOne(targetEntity="Accounts", inversedBy="accountevents")
      * @JoinColumn(name="accounts_id", referencedColumnName="id")
      */
    private $accounts;

    /**
     * @Column(type="string",length=255,nullable=true)
     * @var string
     */
    private $event;

    /**
     * @Column(type="datetime",nullable=false)
     * @var datetime
     */
    private $created_at;


    public function __get($property)
    {
        return $this->$property;
    }

    public function __set($property,$value)
    {
        $this->$property = $value;
    }
}

.. и мой запрос

$query = $this->em->createQueryBuilder()
                       ->select('a, e')
                       ->from('GR\Entity\AccountEvents', 'e')
                       ->leftJoin('e.Accounts', 'a')
                       ->query();


$results = $query->getResult();

Заранее спасибо

1 Ответ

3 голосов
/ 19 марта 2012

Я решил это, и вот решение ниже (я использую ZF 1.11, доктрину 2 и библиотеку nolasnowball)

Смена сущности в Счета

/**
 * @OneToMany(targetEntity="AccountEvents", mappedBy="accounts")
 * @var \Doctrine\Common\Collections\Collection
 */
private $accountevents;

Смена сущности в AccountEvents

/**
 * @ManyToOne(targetEntity="Accounts")
 * @JoinColumn(name="accounts_id", referencedColumnName="id")
 * @var GR\Entity\Accounts
 **/
private $accounts;

Чтобы получить набор результатов

$query = $this->em->createQueryBuilder()
                   ->select('a, e')
                   ->from('GR\Entity\Accounts', 'a')
                   ->leftJoin('a.accountevents', 'e');

$results = $query->getQuery()->getResult();

вот полный код http://pastie.org/3626654

...