Перечисление сопоставления Doctrine2

#php #doctrine-orm #enums #doctrine

#php #doctrine-orm #перечисления #доктрина

Вопрос:

Я пишу свою собственную CMS с Doctrine 2.5.4 и чистым php 5. при сборке я исправил эту ошибку:

Неустранимая ошибка: неперехваченное исключение ‘Doctrine DBAL DBALException’ с сообщением ‘Запрошено перечисление неизвестного типа базы данных, Doctrine DBAL Platforms MySqlPlatform может его не поддерживать.’ в /var/www/html/xxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php: 423 Трассировка стека: #0 /var/www/html/xxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/MySqlSchemaManager.php(126): DoctrineDBALPlatformsAbstractPlatform->getDoctrineTypeMapping(‘перечисление’) #1 /var/www/html/xxxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php(820): DoctrineDBALSchemaMySqlSchemaManager->_getPortableTableColumnDefinition(массив) #2 /var/www/html/xxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php(175): DoctrineDBALSchemaAbstractSchemaManager->_GETPORTABLET TABLECOLUMNLIST(‘bonus_top_….’, ‘xxxx’, массив) #3 /var/www/html/xxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php(281 ) в /var/www/html/xxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php в строке 423 мой config.php:

 <?php
ini_set("display_errors",true);
date_default_timezone_set("Asia/Hongkong");
define('TIMER_START', microtime( true ) );  
define('DS', DIRECTORY_SEPARATOR );
define('ROOT_DIR', realpath( dirname( __FILE__ ) ). DS );   
define('DAODIR', ROOT_DIR.'DAO'.DS );
define('MNGDIR', ROOT_DIR.'manager'.DS );
define('HDLDIR' , ROOT_DIR.'handler'.DS );
define('TPLDIR', ROOT_DIR.'template'.DS );  
define('SKNDIR', TPLDIR.'skin'.DS );    
define('MDLDIR', ROOT_DIR.'model'.DS );             
define('DBN', 'xxxx' );     
define('HOST', 'xxxx' );        
define('USR', 'xxxx' );
define('PWD','xxxx');
require_once "vendor/autoload.php";

use DoctrineORMToolsSetup;
use DoctrineORMEntityManager;

$paths = array(MDLDIR);
$isDevMode = false;

// the connection configuration
$dbParams = array(
    'driver'    => 'pdo_mysql',
    'host'      => HOST,
    'user'      => USR,
    'password'  => PWD,
    'dbname'    => DBN,
    'charset'   =>'utf8',
);

$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode); 
$em = EntityManager::create($dbParams, $config);    
?>
  

и мой news.php

 <?php
 /**
 *   @Entity @Table(name="news")
 */
 class News{
 /**
 *  @nid @Column(type="integer")  // **my id column is nid** 
 *  @GeneratedValue     
 */
 public $id;
 /** @author @Column(type="string")*/
 public $author;
 /** @date @Column(type="integer")*/
 public $date;
 /** @title @Column(type="string")*/
 public $title;
 /**@content @Column(type="text")*/
 public $content;
 /**@full @Column(type="text")*/
 public $full;
 /**@title_en @Column(type="string")*/
 public $title_en;
 /**@content_en @Column(type="text")*/
 public $content_en;
 /**@full_en @Column(type="text")*/
 public $full_en;
 /**@flink @Column(type="text")*/
 public $flink;
 /**@img @Column(type="text")*/
 public $img;   
 }
 ?>
  

моя таблица news в mysql:

  ------------ -------------- ------ ----- --------- ---------------- 
| Field      | Type         | Null | Key | Default | Extra          |
 ------------ -------------- ------ ----- --------- ---------------- 
| nid        | int(11)      | NO   | PRI | NULL    | auto_increment |
| author     | varchar(50)  | NO   |     |         |                |
| date       | int(11)      | NO   |     | 0       |                |
| title      | varchar(255) | NO   |     |         |                |
| content    | text         | NO   |     | NULL    |                |
| full       | text         | NO   |     | NULL    |                |
| title_en   | varchar(255) | NO   |     |         |                |
| content_en | text         | NO   |     | NULL    |                |
| full_en    | text         | NO   |     | NULL    |                |
| flink      | text         | NO   |     | NULL    |                |
| img        | text         | NO   |     | NULL    |                |
 ------------ -------------- ------ ----- --------- ---------------- 
  

Я пытался исправить, как в этой статье, но не сработало.
Я использовал эту ссылку для установки doctrine.
Я действительно понятия не имею, почему.
Пожалуйста, помогите мне.
Заранее спасибо.

P / s: Я не использую какой-либо странный тип, подобный enum ….(новичок T_T).

Комментарии:

1. Я не думаю, что проблема связана с опубликованным вами кодом. Должно быть что-то еще. Я полагаю, что есть какая-то таблица с используемым типом enum

Ответ №1:

Из-за того, что база данных — это моя компания, а не моя, я не знал, что doctrine будет сканировать всю мою базу данных, но не так, как я сделал для конфигурации (только данные, доступные для демонстрации). Когда я заметил, что ошибку заметила другая таблица.

 _getPortableTableColumnList('bonus_top_....', 'xxxx', Array) #3 
  

Итак, я исправил эту таблицу, которая имеет тип enum.
В vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php
добавить "enum" => 'string'

Спасибо всем. И извините за беспокойство.