3

私の CMS では、データベースにテーブルを作成してモジュールを追加したいと考えています。ただし、データマッパーを使用する Codeigniter には、コードでテーブル名を指定するという 1 つの必須ルールがあります。次のように Datamapper モデルを作成しました。

class Module_universeel extends DataMapper {

    public $table = 'module_universeel';
    public $has_one = array('page');

    public function __construct($module_table=null) {

        parent::__construct();
        if(isset($module_table)) $this->table = $module_table;

    }
}

これは、「module_universeel」という名前のテーブルを作成すると機能します。テーブル名を「module_news」などに変更すると機能します。しかし、データマッパーの構造 ($this->fields) は変更されません。

これどうやってするの?誰もこれを経験していますか?

4

3 に答える 3

1

Datamapperは、構成プロパティ「production_cache」によって制御されるテーブル定義をキャッシュします。

キャッシュが有効になっている場合、ページが読み込まれるたびにテーブルが照会されるわけではありませんが、キャッシュされた情報が使用されます。

于 2013-01-21T17:43:56.510 に答える
0

this->fields配列が入力されるため、parent::__construct();その時点でテーブル名は引き続きmodule_universeel

これを試して:

if(isset($module_table)) $this->table = $module_table;
parent::__construct();
于 2012-10-29T09:23:20.133 に答える
0

私には解決策があります。これをデータマッパーモデルに追加します。



    public function updateTableFields(){
            $this->fields = array();
            $data_fields = $this->db->field_data($this->table);
            foreach ($data_fields as $data_field){
                $this->fields[] = $data_field->name;
                $this->stored->{$data_field->name} = "";
            }

        }

そして、これをコンストラクターに追加しました。

$ this-> updateTableFields();

そして今、私は構造をうまく変更しました。私を助けてくれてありがとう!

于 2012-10-29T10:09:42.697 に答える