使用 Doctrine 保存行时出现 Doctrine_Connection_Mysql_Exception

Posted

技术标签:

【中文标题】使用 Doctrine 保存行时出现 Doctrine_Connection_Mysql_Exception【英文标题】:Doctrine_Connection_Mysql_Exception when saving a row with Doctrine 【发布时间】:2011-08-07 16:07:45 【问题描述】:

我有一张简单的桌子。这是模型图片:

abstract class BaseImages extends Doctrine_Record

    public function setTableDefinition()
    
        $this->setTableName('images');
        $this->hasColumn('id', 'integer', 4, array(
             'type' => 'integer',
             'length' => 4,
             'fixed' => false,
             'unsigned' => false,
             'primary' => true,
             'autoincrement' => true,
             ));
        $this->hasColumn('file', 'string', 45, array(
             'type' => 'string',
             'length' => 45,
             'fixed' => false,
             'unsigned' => false,
             'primary' => false,
             'notnull' => false,
             'autoincrement' => false,
             ));
        $this->hasColumn('order', 'integer', 4, array(
             'type' => 'integer',
             'length' => 4,
             'fixed' => false,
             'unsigned' => false,
             'primary' => false,
             'default' => '0',
             'notnull' => false,
             'autoincrement' => false,
             ));
    

    public function setUp()
    
        parent::setUp();
        $this->hasMany('AuthorsHasImages', array(
             'local' => 'id',
             'foreign' => 'images_id'));

        $this->hasMany('Banners', array(
             'local' => 'id',
             'foreign' => 'images_id'));

        $this->hasMany('BooksHasImages', array(
             'local' => 'id',
             'foreign' => 'images_id'));

        $this->hasMany('Collections', array(
             'local' => 'id',
             'foreign' => 'images_id'));

        $this->hasMany('IllustratorsHasImages', array(
             'local' => 'id',
             'foreign' => 'images_id'));

        $this->hasMany('MerchandisingHasImages', array(
             'local' => 'id',
             'foreign' => 'images_id'));
    

当我使用时:

$image = new Images();
$image->file = $name;
$image->save();

我有以下错误:

致命错误:未捕获异常 'Doctrine_Connection_mysql_Exception' 并带有消息 'SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 /Users/maurogadaleta/Sites/org.blackiebooks 的第 1 行的 'order, file) VALUES ('0', 'P8040001.JPG')' 附近使用正确的语法/phpinc/doctrine/Doctrine/Connection.php:1082 堆栈跟踪:#0 /Users/maurogadaleta/Sites/org.blackiebooks/phpinc/doctrine/Doctrine/Connection/Statement.php(269): Doctrine_Connection->rethrowException(Object( PDOException), Object(Doctrine_Connection_Statement)) #1 /Users/maurogadaleta/Sites/org.blackiebooks/phpinc/doctrine/Doctrine/Connection.php(1042): Doctrine_Connection_Statement->execute(Array) #2 /Users/maurogadaleta/Sites/ org.blackiebooks/phpinc/doctrine/Doctrine/Connection.php(687): Doctrine_Connection->exec('INSERT INTO ima...', Array) #3 /Users/maurogadaleta/Sites/org.blackiebooks/phpinc/doctrine/ Doctrine/Connection/UnitOfWork.php(647):Doctrine_ 在 /Users/maurogadaleta/Sites/org.blackiebooks/phpinc/doctrine/Doctrine/Connection.php 1082 行

有谁知道我为什么会收到这个错误以及我可以做些什么来解决这个问题?

【问题讨论】:

您应该避免使用复数名称作为型号名称。如果你这样做,Doctrine 可能会检测到错误的关系类型。 【参考方案1】:

使用标识符引用;

$conn->setAttribute(Doctrine_Core::ATTR_QUOTE_IDENTIFIER, true);

http://www.doctrine-project.org/documentation/manual/1_2/hu/configuration#identifier-quoting

【讨论】:

【参考方案2】:

似乎 Doctrine 没有引用列名,而 order 是 MySQL 关键字。尝试重命名该列(或强制 Doctrine 引用它,如果可能的话)。

【讨论】:

更容易重命名字段

以上是关于使用 Doctrine 保存行时出现 Doctrine_Connection_Mysql_Exception的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine - 删除所有实体

Symfony2/Doctrine:如何使用 OneToMany 将实体重新保存为级联新行

如何使用Doctrine2将实体的克隆保存为更新

在 Doctrine 2 中加载/保存字段时透明地执行 SQL 函数

Doctrine 不会在我的 OneToMany 关联中保存数据

Symfony2 2.3.7 -Doctrine 2.4.1:ManyToMany 关系未保存到数据库