0

我对以下代码片段感到有些困惑,它只是在使用 addField() 将列添加到模型之前检查表中是否存在列。

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

/var/www/ocmal_db_svn/lib/Model/Conflicto.php:[Notice] Undefined property: Model_Conflicto::$entity_code,

这就是 SQL 查询抛出错误的原因,因为没有表名的“SHOW columns FROM”是不完整的......

在类中定义一个公共变量应该初始化它,不是吗?还是有其他问题?任何人都可以在这里看到错误吗?我在看什么?(这是 PHP 5.3 顺便说一句)

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');
4

1 回答 1

0

这绝对不是您问题的完整答案,因为我真的不明白这一点,但是:

1)您应该使用 public $table='conflicto' 而不是 $entity_code 因为 $entity_code 已过时(但出于兼容性原因仍然可用)

2)我看不出有什么理由需要在将字段添加到模型之前检查表中是否存在字段。是否有人在没有通知的情况下简单地从数据库中删除字段并且不将其从模型中删除?如果是这种情况,那么您需要在项目管理中进行一些更改,而不是创建凌乱而缓慢的代码:) 您是否想象如果每次初始化此模型时您都将查询 SHOW 列,会给您的数据库带来多大的压力从表?!

于 2012-10-18T22:14:52.377 回答