Доктрина 2.2 - должен ли я всегда включать все классы - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть два класса:

/** @Entity @Table(name="news") */

    class News {
        /** @Id @GeneratedValue @Column(type="integer") */
        protected $id;

        /** @Column(type="string", length=100) */
        protected $title;

        /** @Column(type="text") */
        protected $content;

        /** @ManyToOne(targetEntity="User", inversedBy="news") */   
        protected $author;
    }

и

/** @Entity @Table(name="users") */
class User {
    /** @Id @GeneratedValue @Column(type="integer") */
    protected $id;

    /** @Column(type="string", length=20, unique=TRUE) */
    protected $login;

    /** @Column(type="string",length=100, unique=TRUE) */
    protected $email;

    /** @Column(type="string",length=24) */
    protected $password;

    /** @OneToOne(targetEntity="Rank", mappedBy="user") */
    protected $rank;    
}

Есть ли способ пропустить, включая User и Rank (используемые в User) классы (которые находятся в отдельных файлах), если я хочу только сделать этот код:

$result = $em->createQuery("SELECT n.title FROM News n WHERE id = 15")->getResult();

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

1 Ответ

0 голосов
/ 01 сентября 2012

В приведенном выше запросе вы загружаете только скалярное значение из сущности, оно будет преобразовано в один запрос SQL только к таблице News.

Doctrine может по-прежнему внутренне загружать метаданные для классов User и Rank, вызывая тем самым автозагрузчик классов. Но это не то, о чем вам следует беспокоиться: в производственных настройках вы обычно используете кэширование метаданных , поэтому при выполнении запроса не должно быть никаких накладных расходов:

$config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ApcCache());

Не используйте этот параметр на компьютере разработчика, вместо этого используйте ArrayCache.

...