doctrine:schema:update error没有列名为' $ column'在桌子上' $ table'

时间:2017-01-24 11:08:30

标签: php mysql symfony doctrine-orm doctrine

我对我的学说实体进行了一些更改,需要更新数据库并出现以下错误。

$ php bin/console doctrine:schema:update -vvv


  [Doctrine\DBAL\Schema\SchemaException (30)]                   
  There is no column with name 'fleet_no' on table 'fuelData'.  


Exception trace:
 () at /home/sarah/workspace/telematics_tracker/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaException.php:86
 Doctrine\DBAL\Schema\SchemaException::columnDoesNotExist() at /home/sarah/workspace/telematics_tracker/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/Table.php:671
 Doctrine\DBAL\Schema\Table->getColumn() at /home/sarah/workspace/telematics_tracker/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php:711
 Doctrine\DBAL\Platforms\MySqlPlatform->getPreAlterTableAlterPrimaryKeySQL() at /home/sarah/workspace/telematics_tracker/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php:639
 Doctrine\DBAL\Platforms\MySqlPlatform->getPreAlterTableIndexForeignKeySQL() at /home/sarah/workspace/telematics_tracker/vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php:621
 Doctrine\DBAL\Platforms\MySqlPlatform->getAlterTableSQL() at /home/sarah/workspace/telematics_tracker/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaDiff.php:199
 Doctrine\DBAL\Schema\SchemaDiff->_toSql() at /home/sarah/workspace/telematics_tracker/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema/SchemaDiff.php:126
 Doctrine\DBAL\Schema\SchemaDiff->toSaveSql() at /home/sarah/workspace/telematics_tracker/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/SchemaTool.php:883
 Doctrine\ORM\Tools\SchemaTool->getUpdateSchemaSql() at /home/sarah/workspace/telematics_tracker/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/UpdateCommand.php:115
 Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand->executeSchemaCommand() at /home/sarah/workspace/telematics_tracker/vendor/doctrine/orm/lib/Doctrine/ORM/Tools/Console/Command/SchemaTool/AbstractCommand.php:65
 Doctrine\ORM\Tools\Console\Command\SchemaTool\AbstractCommand->execute() at /home/sarah/workspace/telematics_tracker/vendor/doctrine/doctrine-bundle/Command/Proxy/UpdateSchemaDoctrineCommand.php:50
 Doctrine\Bundle\DoctrineBundle\Command\Proxy\UpdateSchemaDoctrineCommand->execute() at /home/sarah/workspace/telematics_tracker/vendor/symfony/symfony/src/Symfony/Component/Console/Command/Command.php:261
 Symfony\Component\Console\Command\Command->run() at /home/sarah/workspace/telematics_tracker/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:839
 Symfony\Component\Console\Application->doRunCommand() at /home/sarah/workspace/telematics_tracker/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:185
 Symfony\Component\Console\Application->doRun() at /home/sarah/workspace/telematics_tracker/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:80
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /home/sarah/workspace/telematics_tracker/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:116
 Symfony\Component\Console\Application->run() at /home/sarah/workspace/telematics_tracker/bin/console:27

这是正确的,因为我有一个名为' fleetNo'但没有一个名为“fleet_no'在' fuelData'表。这不是我做出的改变之一。 我在项目目录中搜索了' fleet_no'的任何其他实例。但是没有。

以下是fuelData实体的副本。

<?php
// src/AppBundle/Entity/FuelData.php
namespace AppBundle\Entity;

use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\Column;

/**
 * @ORM\Entity
 * @ORM\Table(name="fuelData")
 * 
 *
 */

class FuelData
{

/**
 * @Assert\NotBlank()
 * @ORM\Column(type="string")
 * @ORM\Id
 */
public $fleetNo;

/**
 * @Assert\NotBlank()
 * @ORM\Column(type="string")
 */
public $startDate;

/**
 * @Assert\NotBlank()
 * @ORM\Column(type="string")
 */
public $endDate;

/**
 * Set fleetNo
 *
 * @param string $fleetNo
 *
 * @return FuelData
 */
public function setFleetNo($fleetNo)
{
    $this->fleetNo = $fleetNo;

    return $this;
}

/**
 * Get fleetNo
 *
 * @return string
 */
public function getFleetNo()
{
    return $this->fleetNo;
}

/**
 * Set startDate
 *
 * @param string $startDate
 *
 * @return FuelData
 */
public function setStartDate($startDate)
{
    $this->startDate = $startDate;

    return $this;
}

/**
 * Get startDate
 *
 * @return string
 */
public function getStartDate()
{
    return $this->startDate;
}

/**
 * Set endDate
 *
 * @param string $endDate
 *
 * @return FuelData
 */
public function setEndDate($endDate)
{
    $this->endDate = $endDate;

    return $this;
}

/**
 * Get endDate
 *
 * @return string
 */
public function getEndDate()
{
    return $this->endDate;
}
}

我能想到的唯一一件事就是列名从camelCase转换为下划线。

我有什么遗漏或者我应该在不同的地方寻找吗?

以下是我的config.yml的相关部分:

doctrine:
    dbal:
        default_connection: maxdb
        connections:
            maxdb:
                driver:   pdo_mysql
                host:     "%database_host%"
                port:     "%database_port%"
                dbname:   "%database_name%"
                user:     "%database_user%"
                password: "%database_password%"
                charset:  UTF8
            foxdb:
                driver:   pdo_mysql
                host:     "%database_host2%"
                port:     "%database_port2%"
                dbname:   "%database_name2%"
                user:     "%database_user2%"
                password: "%database_password2%"
                charset:  UTF8
    orm:
        auto_generate_proxy_classes: "%kernel.debug%"
        default_entity_manager: maxem
        entity_managers:
            maxem:
                naming_strategy: doctrine.orm.naming_strategy.underscore
                connection: maxdb
                mappings:
                    AppBundle: ~
                    BWTCalendarBundle: ~
                    BWTFMBundle: ~
                    BWTHealthCheckBundle: ~
                    BWTSkytrackBundle: ~
                    BWTTelematicsBundle: ~
            foxem:
                naming_strategy: doctrine.orm.naming_strategy.underscore
                connection: foxdb
                mappings:
                    FoxBundle: ~

1 个答案:

答案 0 :(得分:5)

orm:
    auto_generate_proxy_classes: "%kernel.debug%"
    default_entity_manager: maxem
    entity_managers:
        maxem:
            naming_strategy: doctrine.orm.naming_strategy.underscore

正如您在配置中看到的那样,您正在使用orm的UNDERSCORE命名策略,以便转换您的字段名称。

你应该做

app/console doctrine:schema:drop

从干净开始,然后尝试更改命名策略。

最后,如果您想确保拥有确切的列名,只需将name参数添加到colum注释中,如下所示:

/**
* @Assert\NotBlank()
* @ORM\Column(type="string" name="fleetNo")
* @ORM\Id
*/
public $fleetNo;