Home » Php » php – Doctrine2 – "class" is not a valid entity or mapped super class

php – Doctrine2 – "class" is not a valid entity or mapped super class

Posted by: admin April 23, 2020 Leave a comment

Questions:

I get exception Uncaught exception 'Doctrine\ORM\Mapping\MappingException' with message 'Class "Users" is not a valid entity or mapped super class every time when I run the next code:

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);

entities/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;
    }
}

Do you have any ideas why? eAccelerator is not set up. Doctrine v 2.2, PHP v 5.3.22, zend engine 2.3.0

How to&Answers:

You are using a Doctrine\Common\Annotations\SimpleAnnotationReader instead of a Doctrine\Common\Annotations\AnnotationReader.

The SimpleAnnotationReader works with default namespaces and reads annotations in format @Entity, while the AnnotationReader can use the imported classes and namespaces (via use statement) and annotations such as @ORM\Entity.

You can read more about that on the documentation.

Here’s a fixed version of your 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);

Answer:

In my case, I just forgot to add @ORM\Entity, like this:

/**
 * Project\BackendBundle\Entity\Pedido
 *
 * @ORM\Table
 * @ORM\Entity
 * @ORM\HasLifecycleCallbacks
 */
class Pedido

Answer:

You can use your configuration, just provide FALSE to use simple annotation reader, like that.

<?php

//same code

$isSimpleMode = FALSE;
$proxyDir = null;
$cache = null;
$config = Setup::createAnnotationMetadataConfiguration(
$paths, $isDevMode, $proxyDir, $cache, $isSimpleMode
);

//same
?>

Answer:

In my case, I received this error because I opened the doc block with /*** instead of /**:

/***
 * @entity
 * @table(name="bans")
 */

Answer:

Following to Ocramius’s answer (which saved me as well)

If you’ve got some custom namespacing on your Entities make sure that the annotations come after the namespace decleration, here is my Entity that worked:

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

Then in my controller:

   $entityManager->find('App\Models\Books', 1)

Success!