0

addField()を使用してモデルに列を追加する前に、テーブルに列が存在するかどうかを確認するだけの次のコードの一部について、少し混乱しています。

ただし、奇妙なことに、PHP error_logは、初めて使用するときにpublic変数が適切に定義されていないことを警告しています。

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

これが、「SHOW columns FROM」がテーブル名なしでは不完全であるため、SQLクエリがエラーをスローする理由です。

クラス内でパブリック変数を定義すると、それを初期化する必要がありますね。または何か他の問題が発生していますか?誰かがここでエラーを見ることができますか?私は何を見落としていますか?(これは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');
4

1 に答える 1

0

私は実際にはこれの要点を理解していないので、それは間違いなくあなたの質問に対する完全な答えではありませんが、:

1)$ entity_codeは廃止されたため、$entity_codeではなくpublic$ table ='conflicto'を使用する必要があります(ただし、互換性の理由から引き続き使用できます)

2)モデルに追加する前に、フィールドがテーブルに存在するかどうかを確認する必要がある理由がわかりません。誰かが通知なしにデータベースからフィールドを削除し、モデルから削除しない可能性はありますか?その場合は、プロジェクト管理で何かを変更する必要があり、厄介で非常に遅いコードを作成しないでください:)このモデルの初期化ごとにSHOW列をクエリすると、データベースにどれほど大きなストレスが発生するか想像できますか? FROMテーブル?!

于 2012-10-18T22:14:52.377 に答える