【问题标题】:Doctrine2 mapping enumDoctrine2 映射枚举
【发布时间】:2017-03-03 11:41:27
【问题描述】:

我正在使用 Doctrine 2.5.4 和纯 php 5 编写自己的 CMS。 在构建时,我反驳了这个错误:

致命错误:未捕获异常 '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): 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) 在 /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 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;   
 }
 ?>

我在mysql中的表news

+------------+--------------+------+-----+---------+----------------+
| 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)。

【问题讨论】:

  • 我认为问题与您发布的代码无关。应该有别的东西。我相信有一些表使用了枚举类型

标签: php doctrine-orm enums doctrine


【解决方案1】:

由于数据库是我的公司不是我的,我不知道学说会扫描我的所有数据库,但不像我对配置所做的那样(只有一个数据表可以用于演示)。 当我注意到错误时,我注意到了另一个表。

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

所以我确实修复了这个具有枚举类型的表。 在 vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php 添加"enum" =&gt; 'string'

谢谢大家。 很抱歉给您带来麻烦。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 1970-01-01
    相关资源
    最近更新 更多