Невозможно вызвать функции для извлеченных сущностей с Doctrine 2

Я новичок в PHP, а также в Doctrine. (Ранее работал с реализацией Hibernate ORM).

Моя проблема в том, что после получения записи из моей базы данных с помощью entityManager я вообще не могу получить доступ к методам объекта. Ниже приведены некоторые фрагменты кода:

Создание менеджера объектов:

    $classLoader = new \Doctrine\Common\ClassLoader('entities');
    $classLoader->register();

    $config = new Configuration();
    $cache = new ArrayCache();
    $config->setMetadataCacheImpl($cache);

    $driverImpl = $config->newDefaultAnnotationDriver('entities');
    $driverImpl->getAllClassNames(); 
    $config->setMetadataDriverImpl($driverImpl);
    $config->setQueryCacheImpl($cache);
    $config->setProxyDir('proxies');
    $config->setProxyNamespace('proxies\namespaces');

    $config->setAutoGenerateProxyClasses(true);
    $em = EntityManager::create(getConnOptions(), $config);

это работает нормально!

Вот мой класс Entity:

namespace entities\positions;
/**
 * Positions
 *
 * @Table(name="positions")
 * @Entity
 */

class Positions
{
 /**
     * @var bigint $id
     *
     * @Column(name="id", type="bigint", nullable=false)
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     */
private $id;

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

/**
 * @var integer $number
 *
 * @Column(name="number", type="integer", nullable=true)
 */
public $number;

/**
 * @var Volumes
 *
 * @ManyToOne(targetEntity="Volumes")
 * @JoinColumns({
 *   @JoinColumn(name="volume_id", referencedColumnName="id")
 * })
 */
private $volume;

public function getNumber() {

    return $this->number;

}

}

и вот код, который генерирует ошибку:


$found = $this->em->find('Positions', 1);
echo $found->getNumber();

ошибка, которую я получаю, следующая:

Неустранимая ошибка: вызов неопределенного метода Positions::getNumber() в /var/www/php-test/business/Test.php в строке 30

Можете ли вы предложить мне, как это исправить? Спасибо.

Н.Б. Это дает мне ту же ошибку, если я пытаюсь вызвать: $found->number, который я сделал общедоступным по этой причине.


person artaxerxe    schedule 31.05.2011    source источник


Ответы (1)


Проблема связана с тем, что у меня было объявлено пространство имен в сущности. Это было причиной того, что я получил эту ошибку. Если у вас есть объекты в каталоге entity/, разбросанном по его собственному каталогу, вам нужно поместить эти пути в конфигурацию массива создания драйвера:

$driverImpl = $config->newDefaultAnnotationDriver(array("entities", "entities/dir1", "entities/dir2"));

Это делает свое дело.

person artaxerxe    schedule 31.05.2011