我在我的 PHP 项目中使用 Doctrine 2.6.2。使用 ORM 工具成功创建了 Schema,但在运行时会抛出 MappingException。
我仍然无法理解异常错误消息“类'凭据'不存在于......”,因为我不了解学说的内部结构。
我的composer.json文件:
{
"require": {
"doctrine/orm": "^2.6.2",
"symfony/yaml": "2.*"
},
"autoload": {
"psr-0": {"": "src/"}
}
}
我尝试更改一些 phpdoc 注释并多次重置架构。
有人经历过类似的教义问题吗?我希望得到一些关于此问题的提示,因为我什至不确定这个问题是由我的 PHP 代码文件引起的,还是由我正在使用的 orm 工具的某些配置错误引起的,或者很可能是由我没想到的东西引起的还没有。
/**
* @Entity @Table(name="credentials")
*/
class Credentials
{
/** @Id @Column(type="integer") @GeneratedValue **/
protected $id;
/** @Column(type="string") **/
public $Email;
/** @Column(type="string") **/
public $Loginname;
/** @Column(type="string") **/
public $EntropyString;
/** @Column(type="string") **/
public $AccessToken;
public function __construct()
{
}
public function getId()
{
return $this->id;
}
}
这是 apache 的完整回复:
致命错误:未捕获 Doctrine\Common\Persistence\Mapping\MappingException:类 “凭据”不存在于 F:\XAMPP\httpd.private\src\php endor\doctrine\persistence\lib\Doctrine\Common\Persistence\Mapping\MappingException.php:93 堆栈跟踪:#0 F:\XAMPP\httpd.private\src\php endor\doctrine\persistence\lib\Doctrine\Common\Persistence\Mapping\RuntimeReflectionService.php(24): Doctrine\Common\Persistence\Mapping\MappingException::nonExistingClass('credentials')
1 F:\XAMPP\httpd.private\src\php endor\doctrine\persistence\lib\Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory.php(250):
Doctrine\Common\Persistence\Mapping\RuntimeReflectionService->getParentClasses('credentials')
2 F:\XAMPP\httpd.private\src\php endor\doctrine\persistence\lib\Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory.php(283):
Doctrine\Common\Persistence\Mapping\AbstractClassMetadataFactory->getParentClasses('credentials')
3 F:\XAMPP\httpd.private\src\php endor\doctrine\orm\lib\Doctrine\ORM\Mapping\ClassMetadat
在 F:\XAMPP\httpd.private\src\php endor\doctrine\persistence\lib\Doctrine\Common\Persistence\Mapping\MappingException.php 93号线
调用 EntityManager 的 Find 方法时发生错误:
$this->credentials = $this->entityManager->Find('credentials', $result[0]["id"]);
将完全限定的类名添加到 EntityManager 的 Find 方法的调用中后,不再出现异常:
$this->credentials = $this->entityManager->Find('Businessrelations\Database\Credentials', $result[0]["id"]);
您可以使用 PHP 5.5 中的 ::class
use theNamesPaceToYourClass/Credentials;
$this->credentials = $this->entityManager->Find(Credentials::class, $result[0]["id"]);