Doctrine2: Что плохого в связи между этими сущностями? - PullRequest
2 голосов
/ 06 апреля 2011

Я пытаюсь проработать простые примеры, чтобы увидеть все изменения в Doctrine2.

Обратите внимание на следующие фрагменты сущности:

VCat.php

namespace Application\Models;

/**
 * @Entity
 * @Table(name="v_cat")
 */
class VCat
{
    /** 
     * @Id @Column(type="bigint")
     * @GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @OneToMany(targetEntity="VScat", mappedBy="vCat")     )
     */
    private $vScats;

namespace Application\Models;

VScat.php

namespace Application\Models;
/**
 * @Entity
 * @Table(name="v_scat",indexes={@index(name="FK_v_scat",columns={"vcatid"})})
 */
class VScat
{
    /** 
     * @Id @Column(type="bigint")
     * @GeneratedValue(strategy="AUTO")
     */
    private $id;


    /**
     * @ManyToOne(targetEntity="VCat", inversedBy="vScats")
     * @JoinColumn(name="vcatid", referencedColumnName="id")
     */
    private $vCat;

vcatid isстолбец внешнего ключа в таблице v_scat

Это запрос, который я пытаюсь выполнить:

$categories = Zend_Registry::get('em')
        -> createQuery('select c.name, sub.name as sub_name from \Application\Models\VCat c JOIN c.VScat sub WHERE sub.active = 1 and c.active = 1 and c.id = sub.vcatid')
        -> getResult();

И это ошибка:

(string:130) [Semantical Error] line 0, col 69 near 'sub WHERE sub.active': Error: Class Application\Models\VCat has no association named VScat

Кажется правильным, но я явно что-то упускаю.

ОБНОВЛЕНИЕ Теперь я получаю эту ошибку, которая относится к имени столбца таблицы в MySQL.Это неправильно?Я подумал, что нужно как-то сказать Doctrine, что это свойство принадлежит этому полю в БД.

 Error: Class Application\Models\VScat has no field or association named vcatid

1 Ответ

3 голосов
/ 06 апреля 2011

Это свойство в VCat, на которое нужно ссылаться, а не на тип объекта.

JOIN c.VScat sub 

должно быть:

JOIN c.vScats sub 
...