手动将属性添加到Symfony1.4和Doctrine中的Base模型

时间:2014-02-09 14:43:49

标签: php doctrine symfony1 symfony-1.4 doctrine-1.2

我在表Empresa中添加了一个新字段,因此我需要更改模型。为了不重新生成整个事物,意味着模型 - 表单 - 过滤器我决定手动添加(手动),所以我试图将属性添加到BaseSdrivingEmpresa.class.php,如下所示:

<?php

/**
 * BaseSdrivingEmpresa
 * 
 * This class has been auto-generated by the Doctrine ORM Framework
 * 
 * @property integer $umbralvoz
 * 
 * @method integer                    getUmbralvoz()                  Returns the current record's "umbralvoz" value
 * @method SdrivingEmpresa            setUmbralvoz()                  Sets the current record's "umbralvoz" value
 * 
 * @package    isecurdriving
 * @subpackage model
 * @author     Your name here
 * @version    SVN: $Id: Builder.php 7490 2010-03-29 19:53:27Z jwage $
 */
abstract class BaseSdrivingEmpresa extends sfDoctrineRecord {

    public function setTableDefinition() {
        $this->setTableName('sdriving_empresa');

        $this->hasColumn('umbralvoz', 'integer', 11, array(
            'type' => 'integer',
            'notnull' => false,
            'default' => 60,
            'length' => 11,
        ));
    }

}

但是我收到了这个错误:

  

500 |内部服务器错误| Doctrine_Record_UnknownPropertyException

每当我尝试让属性在模板上显示时:

$id_empresa = $this->getUser()->getGuardUser()->getSfGuardUserProfile()->getIdempresa();
$this->sdriving_configuracion = Doctrine_Core::getTable('SdrivingEmpresa')->createQuery('a')->where('a.idempresa = ?', $id_empresa)->execute();

<?php echo $sdriving_configuracion[0]->SdrivingEmpresa->getUmbralvoz() ?>

我的错误在哪里?

1 个答案:

答案 0 :(得分:2)

首先手动编辑Base*.class.php并不是一个好主意,因为这个类是自动生成的,并且会被下一个模型构建覆盖。如果您想手动执行任何操作,则应该使用BaseSdrivingEmpresa.class.php SdrivingEmpresa.class.php的直接子项进行操作。 第二件事是,这种修改的更好地方是SdrivingEmpresaTable.class.php。我建议修改getInstance方法,使它看起来像:

public static function getInstance()
{
    $this->setColumn('umbralvoz', 'integer', 11, array(
        'type' => 'integer',
        'notnull' => false,
        'default' => 60,
        'length' => 11,
    ));
    return Doctrine_Core::getTable('SdrivingEmpresa');
}

最后,我认为在这种情况下,最佳解决方案只是修改您的schema.yml文件,添加您的列然后使用命令

./symfony doctrine:build-model

将重建您的模型,而不会触及您提到的表单,过滤器。