2014-09-18 3 views
1

Я хочу получить доступ к базе данных PostgreSQL с помощью Doctrine 2 в приложении Zend 2, но я получаю сообщение об ошибке, что таблица, которую я хочу получить, не определена.Ошибка: неопределенная таблица при попытке доступа к PostgreSQL с Doctrine2

Тот же доступ к базе данных MySQL отлично работает.

Моя конфигурация Учение (local.php) является:

return array(
'doctrine' => array(
    'connection' => array(
     'orm_default' => array(
      // MySQL - Config 
//     'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver', 
//     'params' => array(
//      'host'  => '192.168.1.100', 
//      'port'  => '3306', 
//      'user'  => 'user', 
//      'password' => 'password', 
//      'dbname' => 'mydb', 
//      'charset' => 'utf8', 
//    ), 
      // PostgreSQL 
      'driverClass' => 'Doctrine\DBAL\Driver\PDOPgSql\Driver', 
      'params' => array(
        'host'  => '192.168.1.100', 
        'port'  => '5432', 
        'user'  => 'user', 
        'password' => 'password', 
        'dbname' => 'mydb', 
        'charset' => 'utf8', 
      ), 
     ), 
    ), 
), 
); 

Мой контроллер пытается отобразить Entity "Лошадь":

class HorsesController extends AbstractActionController 
{ 

    /** 
    * @var Doctrine\ORM\EntityManager 
    */ 
    protected $em; 

    public function getEntityManager() 
    { 
    if (null === $this->em) { 
     $this->em = $this->getServiceLocator()->get('doctrine.entitymanager.orm_default'); 
    } 
    return $this->em; 
    } 

    /** 
    * The default action - show the home page 
    */ 
    public function indexAction() 
    { 
    $id = (int)$this->getEvent()->getRouteMatch()->getParam('id'); 
    $horse = $this->getEntityManager()->find('Doctrine2mapper\Entity\Horse', $id); 
    return new ViewModel(array(
      'horse' => $horse, 
    )); 
    } 
} 

Платформа Entity Лошадь:

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\Common\Collections\Collection; 

use Zend\Form\Annotation; // !!!! Absolutely neccessary 

use Zend\Db\Sql\Ddl\Column\BigInteger; 

/** 
* Horses 
* 
* @ORM\Table(name="Horse") 
* @ORM\Entity(repositoryClass="Doctrine2mapper\Entity\Repository\HorseRepository") 
* @Annotation\Name("Horse") 
* @Annotation\Hydrator("Zend\Stdlib\Hydrator\ClassMethods") 
*/ 
class Horse 
{ 

    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    * @Annotation\Exclude() 
    */ 
    private $id; 

    /** 
    * Get id 
    * 
    * @return integer 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 
. 
. 
. 
(many attributes, getter and setter) 

При попытке доступа к PostgreSQL я получаю эту ошибку:

An exception occurred while executing 'SELECT t0.id AS id1, ... 
FROM Horse t0 WHERE t0.id = ?' with params [1]: 

SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "horse" does not exist 
LINE 1: ...ated AS created29, t0.modified AS modified30 FROM Horse t0 W... 

У меня есть PostgreSQL Database «MYDB» со схемой «публичного» и таблицы «Лошадь»

-- Table: "Horse" 

CREATE TABLE "Horse" 
(
    id serial NOT NULL, 
    . 
    . 
    . 
); 

существует и могут быть доступны с помощью pgAdminIII.

Любая помощь приветствуется!

С наилучшими пожеланиями rholtermann

ответ

1

Найден ответ, теперь он работает.

Я просто должен был добавить схему и пришлось бежать ему немного:

В моей лошади-ОБЪЕКТ:

@ORM\Table("Horse") 

пришлось заменить:

@ORM\Table(name="""public"".""Horse""") 

I уточняйте подсказку от here

Смежные вопросы