我对以下剪切代码感到有些困惑,这些代码只是检查表中是否存在列,然后使用addField()将其添加到Model中。
但奇怪的是,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 BTW)
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');
答案 0 :(得分:0)
这绝对不是你问题的完整答案,因为我并不是真的明白这一点,但是:
1)你应该使用public $ table ='conflicto'而不是$ entity_code,因为$ entity_code已经过时(但出于兼容性原因仍可使用)
2)在将其添加到模型之前,我没有看到为什么需要检查表中是否存在字段的任何原因。有人可能只是在没有通知的情况下从数据库中删除字段而不从模型中删除它吗?如果是这种情况,那么你需要在项目管理中改变一些东西,而不是创建凌乱的和慢速的代码:) 您是否想象如果对于此模型的每次初始化,您将向数据库生成多大的压力,您将查询SHOW列FROM表?!