2017-09-05 76 views
1

我有一個乾淨的安裝只是學說ORM的主義不加載類MappingException

請幫助我得到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; 

} 

我有一個正規的引導文件

<?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

無論我做什麼,我總是得到致命錯誤:未捕獲的學說\ COMMON \持久性\製圖\ MappingException:類「產品」不存在中d:\項目\ PP \供應商\原則\ common \ lib文件\原則\ COMMON \持久性\製圖\ MappingException.php上線96

+0

您的實體是否確實位於'__DIR __。「/ src」'中?你打印過這個路徑並檢查一切是否正確?自動裝載機配置是否正確? – ccKep

+0

是的問題是,路徑是正確的,我已經在幾種方式檢查。我不知道還有什麼要檢查的。 – user3410843

+0

嘗試在您的composer.json中添加'「autoload」:{「psr-4」:{「src \\」:「src /」}}'(使用'src'作爲名字空間雖然很不尋常,但) – ccKep

回答

0

有兩個問題在這裏

1)

createAnnotationMetadataConfiguration具有第5個參數,它是布爾$ useSimpleAnnotationReader。所以,如果你想配置過程中寫這樣的事情

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

過去的第五個參數虛假

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, null, null, false); 

否則,如果你不包括測繪,並@ORM前,將工作只是罰款

/** 
* @Entity 
*/ 

2)

如果你想你的命名空間的實體,你必須爲您的實體添加命名空間到你的配置

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

第一個參數是一個別名(你可以讓它空或任何你把應該在前面附加[:]在未來的聲明),現在你可以調用

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