Doctrine没有加载一个MappingException类

时间:2017-09-05 16:18:48

标签: php symfony doctrine-orm doctrine autoload

我刚刚安装了Doctrine ORM

请帮助我一直为Product类获取MappingException

<?php

namespace src;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="product")
 */
class Product{

    /**
     * @ORM\Column(type="integer", length = 5)
     * @ORM\Id
     * @ORM\GenerateValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(type="string", length=2, name="product_code")
     */
    protected $code;

    /**
     * @ORM\Column(type="string", length=10, name="product_name")
     */
    protected $name;

}

我有一个常规的bootstrap文件

<?php
// bootstrap.php
require_once "vendor/autoload.php";
require_once "src/Product.php";

use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;

$paths = array(__DIR__."/src");
$isDevMode = true;

$dbParams = array(
    'driver'   => 'pdo_mysql',
    'user'     => 'root',
    'password' => '',
    'dbname'   => 'myDbName',
);

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);

$theProduct = $entityManager->find("Product", 500);

我有一个

的作曲家
{
  "require": {
    "doctrine/orm": "v2.5.10"
  },
  "autoload": {
    "psr-4": {
      "src\\": "src/"
    }
  }
}

文件夹结构是 enter image description here

我正在运行bootstrap.php

无论我做什么,我总是会遇到致命错误:未捕获的Doctrine \ Common \ Persistence \ Mapping \ MappingException:D:\ projects \ pp \ vendor \ doctrine \ common \ lib \ Doctrine \ Common \中不存在类'Product'第96行的Persistence \ Mapping \ MappingException.php

1 个答案:

答案 0 :(得分:2)

这里有两个问题

1)

createAnnotationMetadataConfiguration有一个第5个参数,它是boolean $ useSimpleAnnotationReader。所以,如果你想写这样的东西

use Doctrine\ORM\Mapping as ORM
/**
 * @ORM\Entity
 */

在配置

期间超过第5个参数false
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, null, null, false);

否则,如果你不包含Mapping,并且@ORM在前面就可以正常使用

/**
* @Entity
*/

2)

如果要为实体命名空间,则必须将实体的命名空间添加到配置

$config->addEntityNamespace('', 'src\entity');

第一个参数是一个别名(你可以把它留空或者你在下一个语句的[:]前加上你应该放的任何东西),现在你可以调用

$theProduct = $entityManager->find(":Product", 500);