我是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);
它工作正常!
这是我的实体类:
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()
你能建议我怎么解决吗? 感谢。
N.B。如果我尝试拨打:$ found->号码,我会因为这个原因公开,这给了我同样的错误。
答案 0 :(得分:1)
问题是由于我被声明为实体中的命名空间。这就是我得到这个错误的原因。如果您将实体/目录下的实体分散在其自己的目录中,则需要将此路径放在驱动程序创建阵列配置中:
$driverImpl = $config->newDefaultAnnotationDriver(array("entities", "entities/dir1", "entities/dir2"));
这就是诀窍。