Php 无法使用条令2对提取的实体调用函数

Php 无法使用条令2对提取的实体调用函数,php,orm,doctrine-orm,Php,Orm,Doctrine Orm,我不熟悉PHP,也不熟悉信条。(以前使用过Hibernate ORM实现) 我的问题是,在entityManager从数据库中获取记录之后,我根本无法访问对象方法。以下是一些代码片段: 实体管理器创建: $classLoader = new \Doctrine\Common\ClassLoader('entities'); $classLoader->register(); $config = new Configuration(); $cache = n

我不熟悉PHP,也不熟悉信条。(以前使用过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);
很好用

这是我的实体类:

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();
我得到的错误如下:

致命错误:在第30行的/var/www/php test/business/test.php中调用未定义的方法Positions::getNumber()

你能建议我怎么修吗? 谢谢


注意:如果我试图调用:$found->number,它会给我同样的错误,我已经公开了这个原因。

问题是因为我在实体中声明了名称空间。这就是我犯这个错误的原因。如果实体/目录下的实体分散在其自己的目录中,则需要在驱动程序创建阵列配置中设置以下路径:

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

这就解决了问题。

问题在于我在实体中声明了名称空间。这就是我犯这个错误的原因。如果实体/目录下的实体分散在其自己的目录中,则需要在驱动程序创建阵列配置中设置以下路径:

$driverImpl = $config->newDefaultAnnotationDriver(array("entities", "entities/dir1", "entities/dir2"));
这就是诀窍