Atk4 模型类中公共变量的未定义属性?

Atk4 模型类中公共变量的未定义属性?,atk4,Atk4,我对以下截取的代码有些困惑,这些代码只是在使用addField()将列添加到模型之前检查表中是否存在列 然而奇怪的是,PHP error_log警告我在第一次使用公共变量时没有正确定义它: /var/www/ocmal_db_svn/lib/Model/Conflicto.php:[Notice] Undefined property: Model_Conflicto::$entity_code, 这就是SQL查询引发错误的原因,因为“ShowColumns FROM”在没有表名的情况下不完整

我对以下截取的代码有些困惑,这些代码只是在使用addField()将列添加到模型之前检查表中是否存在列

然而奇怪的是,PHP error_log警告我在第一次使用公共变量时没有正确定义它:

/var/www/ocmal_db_svn/lib/Model/Conflicto.php:[Notice] Undefined property: Model_Conflicto::$entity_code,
这就是SQL查询引发错误的原因,因为“ShowColumns FROM”在没有表名的情况下不完整

在类中定义公共变量应该初始化它,不是吗? 还是其他什么地方出了问题?有人能在这里看到错误吗? 我忽略了什么?(这是PHP 5.3 BTW)


这肯定不是你问题的完整答案,因为我真的不明白这一点,但是:

1) 您应该使用公共$table='conflicto'而不是$entity\代码,因为$entity\代码已经过时(但出于兼容性原因仍然可用)

2) 在将字段添加到模型之前,我看不出有任何理由需要检查该字段是否存在于表中。是否有可能有人只是在不通知的情况下从数据库中删除字段,而不将其从模型中删除?如果是这样的话,那么您需要在项目管理中进行一些更改,而不是创建凌乱和缓慢的代码:)
你们能想象一下,若每次初始化这个模型,你们都要从表中查询SHOW列,那个么会给你们的数据库带来多大的压力吗

谢谢你的评论。很明显,这还不是生产,错误日志是出于测试和兼容性原因而存在的。我将按照您的建议用表替换实体代码,并查看其效果。啊,是的:我现在看到,在模型表中:
function\uu-construct(){if($this->entity\u-code){$this->table=$this->entity\u-code;unset($this->entity\u-code);}
class Model_Conflicto extends Model_Table {

      public $entity_code='conflicto';

        function init(){
             parent::init();

               if ($this->api->db->dsql()->expr("SHOW COLUMNS FROM `". $this->entity_code. "` LIKE 'lock_id'")->getOne()==null)
          error_log('OCMAL_DB: WARNING: table '.$this->entity_code.' does not have lock_id, which is kinda BAD !!!');
        else $this->addField('lock_id');