Я получаю исключение. Исключение Uncaught exception 'Doctrine\ORM\Mapping\MappingException' with message 'Class "Users" is not a valid entity or mapped super class
каждый раз, когда я запускаю следующий код:
test.php
<?php require_once "vendor/autoload.php"; use Doctrine\ORM\Tools\Setup; use Doctrine\ORM\EntityManager; $paths = array(dirname(__FILE__)."/entities"); $isDevMode = false; // the connection configuration $dbParams = array( 'driver' => 'pdo_mysql', 'user' => 'root', 'password' => 'pass', 'dbname' => 'snabcentr', ); $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode); $em = EntityManager::create($dbParams, $config); $user = $em->find("Users", 5);
лица / Users.php
<?php use Doctrine\ORM\Mapping as ORM; /** * Users * * @ORM\Table(name="users") * @ORM\Entity */ class Users { /** * @var integer * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string * * @ORM\Column(name="email", type="string", length=255, nullable=true) */ private $email; /** * @var string * * @ORM\Column(name="password", type="string", length=255, nullable=true) */ private $password; /** * @var string * * @ORM\Column(name="type", type="string", nullable=true) */ private $type; /** * @var string * * @ORM\Column(name="client_inn", type="string", length=255, nullable=true) */ private $clientInn; /** * @var string * * @ORM\Column(name="client_ogrn", type="string", length=255, nullable=true) */ private $clientOgrn; /** * @var string * * @ORM\Column(name="client_rs", type="string", length=255, nullable=true) */ private $clientRs; /** * @var string * * @ORM\Column(name="client_ks", type="string", length=255, nullable=true) */ private $clientKs; /** * @var string * * @ORM\Column(name="client_bik", type="string", length=255, nullable=true) */ private $clientBik; /** * @var string * * @ORM\Column(name="client_uaddress", type="string", length=255, nullable=true) */ private $clientUaddress; /** * @var string * * @ORM\Column(name="client_faddress", type="string", length=255, nullable=true) */ private $clientFaddress; /** * @var string * * @ORM\Column(name="client_daddress", type="string", length=255, nullable=true) */ private $clientDaddress; /** * @var string * * @ORM\Column(name="name", type="string", length=255, nullable=true) */ private $name; /** * @var string * * @ORM\Column(name="notes", type="text", nullable=true) */ private $notes; /** * @var \DateTime * * @ORM\Column(name="added_date", type="datetime", nullable=true) */ private $addedDate; /** * Get id * * @return integer */ public function getId() { return $this->id; } /** * Set email * * @param string $email * @return Users */ public function setEmail($email) { $this->email = $email; return $this; } /** * Get email * * @return string */ public function getEmail() { return $this->email; } /** * Set password * * @param string $password * @return SnabUsers */ public function setPassword($password) { $this->password = $password; return $this; } /** * Get password * * @return string */ public function getPassword() { return $this->password; } /** * Set type * * @param string $type * @return SnabUsers */ public function setType($type) { $this->type = $type; return $this; } /** * Get type * * @return string */ public function getType() { return $this->type; } /** * Set clientInn * * @param string $clientInn * @return SnabUsers */ public function setClientInn($clientInn) { $this->clientInn = $clientInn; return $this; } /** * Get clientInn * * @return string */ public function getClientInn() { return $this->clientInn; } /** * Set clientOgrn * * @param string $clientOgrn * @return SnabUsers */ public function setClientOgrn($clientOgrn) { $this->clientOgrn = $clientOgrn; return $this; } /** * Get clientOgrn * * @return string */ public function getClientOgrn() { return $this->clientOgrn; } /** * Set clientRs * * @param string $clientRs * @return SnabUsers */ public function setClientRs($clientRs) { $this->clientRs = $clientRs; return $this; } /** * Get clientRs * * @return string */ public function getClientRs() { return $this->clientRs; } /** * Set clientKs * * @param string $clientKs * @return SnabUsers */ public function setClientKs($clientKs) { $this->clientKs = $clientKs; return $this; } /** * Get clientKs * * @return string */ public function getClientKs() { return $this->clientKs; } /** * Set clientBik * * @param string $clientBik * @return SnabUsers */ public function setClientBik($clientBik) { $this->clientBik = $clientBik; return $this; } /** * Get clientBik * * @return string */ public function getClientBik() { return $this->clientBik; } /** * Set clientUaddress * * @param string $clientUaddress * @return SnabUsers */ public function setClientUaddress($clientUaddress) { $this->clientUaddress = $clientUaddress; return $this; } /** * Get clientUaddress * * @return string */ public function getClientUaddress() { return $this->clientUaddress; } /** * Set clientFaddress * * @param string $clientFaddress * @return SnabUsers */ public function setClientFaddress($clientFaddress) { $this->clientFaddress = $clientFaddress; return $this; } /** * Get clientFaddress * * @return string */ public function getClientFaddress() { return $this->clientFaddress; } /** * Set clientDaddress * * @param string $clientDaddress * @return SnabUsers */ public function setClientDaddress($clientDaddress) { $this->clientDaddress = $clientDaddress; return $this; } /** * Get clientDaddress * * @return string */ public function getClientDaddress() { return $this->clientDaddress; } /** * Set name * * @param string $name * @return SnabUsers */ public function setName($name) { $this->name = $name; return $this; } /** * Get name * * @return string */ public function getName() { return $this->name; } /** * Set notes * * @param string $notes * @return SnabUsers */ public function setNotes($notes) { $this->notes = $notes; return $this; } /** * Get notes * * @return string */ public function getNotes() { return $this->notes; } /** * Set addedDate * * @param \DateTime $addedDate * @return SnabUsers */ public function setAddedDate($addedDate) { $this->addedDate = $addedDate; return $this; } /** * Get addedDate * * @return \DateTime */ public function getAddedDate() { return $this->addedDate; } }
У вас есть идеи, почему? eAccelerator не настроен. Doctrine v 2.2, PHP v 5.3.22, zend engine 2.3.0
Вы используете Doctrine\Common\Annotations\SimpleAnnotationReader
вместо Doctrine\Common\Annotations\AnnotationReader
.
SimpleAnnotationReader
работает с пространствами имен по умолчанию и читает аннотации в формате @Entity
, в то время как AnnotationReader
может использовать импортированные классы и пространства имен (через оператор use
) и аннотации, такие как @ORM\Entity
.
Вы можете больше узнать об этом в документации .
Вот фиксированная версия вашего test.php
<?php use Doctrine\ORM\Tools\Setup; use Doctrine\ORM\EntityManager; use Doctrine\ORM\Mapping\Driver\AnnotationDriver; use Doctrine\Common\Annotations\AnnotationReader; use Doctrine\Common\Annotations\AnnotationRegistry; require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/entities/Users.php'; $paths = array(__DIR__ . '/entities'); $isDevMode = false; $connectionParams = array( 'driver' => 'pdo_mysql', 'user' => 'root', 'password' => 'pass', 'dbname' => 'dbname', ); $config = Setup::createConfiguration($isDevMode); $driver = new AnnotationDriver(new AnnotationReader(), $paths); // registering noop annotation autoloader - allow all annotations by default AnnotationRegistry::registerLoader('class_exists'); $config->setMetadataDriverImpl($driver); $em = EntityManager::create($connectionParams, $config); $user = $em->find('Users', 5);
В моем случае я просто забыл добавить @ORM\Entity
, например:
/** * Project\BackendBundle\Entity\Pedido * * @ORM\Table * @ORM\Entity * @ORM\HasLifecycleCallbacks */ class Pedido
Вы можете использовать свою конфигурацию, просто предоставляйте FALSE, чтобы использовать простой читатель аннотаций.
<?php //same code $isSimpleMode = FALSE; $proxyDir = null; $cache = null; $config = Setup::createAnnotationMetadataConfiguration( $paths, $isDevMode, $proxyDir, $cache, $isSimpleMode ); //same ?>
В моем случае я получил эту ошибку, потому что я открыл блок doc с помощью /***
вместо /**
:
/*** * @entity * @table(name="bans") */
Следуя ответу Окрамиуса (который спас меня также)
Если у вас есть пользовательское пространство имен на ваших сущностях, убедитесь, что аннотации приходят после объявления пространства имен, вот мой Entity, который сработал:
<?php namespace App\Models; /** * Books * * @ORM\Table(name="books") * @ORM\Entity */ use Doctrine\ORM\Mapping as ORM; class Books { /** * @var integer * * @ORM\Column(name="id", type="integer", nullable=false) * @ORM\Id * @ORM\GeneratedValue(strategy="IDENTITY") */ private $id; /** * @var string * * @ORM\Column(name="name", type="string", length=20, nullable=true) */ private $name; /** * @var string * * @ORM\Column(name="isbn", type="string", length=20, nullable=true) */ private $isbn;
Тогда в моем контроллере:
$entityManager->find('App\Models\Books', 1)
Успех!