2016-10-21 3 views
0

Я пишу собственную CMS с доктриной 2.5.4 и чистый PHP 5. при строительстве, я парировал эту ошибку:Doctrine2 отображение перечисления

Fatal error: Uncaught exception 'Doctrine\DBAL\DBALException' with message 'Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform may not support it.' in /var/www/html/xxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php:423 Stack trace: #0 /var/www/html/xxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/MySqlSchemaManager.php(126): Doctrine\DBAL\Platforms\AbstractPlatform->getDoctrineTypeMapping('enum') #1 /var/www/html/xxxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php(820): Doctrine\DBAL\Schema\MySqlSchemaManager->_getPortableTableColumnDefinition(Array) #2 /var/www/html/xxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php(175): Doctrine\DBAL\Schema\AbstractSchemaManager->_getPortableTableColumnList('bonus_top_....', 'xxxx', Array) #3 /var/www/html/xxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/AbstractSchemaManager.php(281) in /var/www/html/xxxx.com/public_html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/AbstractPlatform.php on line 423 my 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 Doctrine\ORM\Tools\Setup; 
use Doctrine\ORM\EntityManager; 

$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 |    | 
+------------+--------------+------+-----+---------+----------------+ 

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

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

+0

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

ответ

1

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

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

Так что я исправил эту таблицу, которая имеет тип перечисления. В вендора/Доктрина/DBAL/Библиотека/Doctrine/DBAL/Платформы/MySqlPlatform.php добавить "enum" => 'string'

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

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