0

そのタイムスパンとuser_idをテーブルの特定の列に挿入/更新挿入するときにデフォルトでcodeigniterをハックする方法はありますか?

データベースに8つのテーブルがあり、すべてに(update_time、updated_by)列が含まれています。これにより、codeigniterのアクティブなレコードを設定して、更新/挿入が発生したときに自動的にデータが入力されるようにします。update_time=time() and update_by=$this->session->userdata('user')->id;

また、同じ概念で、削除する代わりに、削除アクションをハックしてcolumn(archived)= 1を更新したいと思います(私のmysqlユーザーはとにかく削除レコードアクセスを持っていないため)

出来ますか ?

4

2 に答える 2

1

これを達成するためにCIをハックしたい場合は、system / drivers / DB_Active_rec.phpを調べる必要があります(CIでアクティブレコード機能を使用している場合)

たとえば、そのファイルの更新メソッドを変更することにより、更新に現在の時刻を挿入できます。これを変える:

public function update($table = '', $set = NULL, $where = NULL, $limit = NULL)
{
    // Combine any cached components with the current statements
    $this->_merge_cache();

    if ( ! is_null($set))
    {
        $this->set($set);
    }
            [...]

の中へ:

public function update($table = '', $set = NULL, $where = NULL, $limit = NULL)
{
    // Combine any cached components with the current statements
    $this->_merge_cache();

    // start of Insert updated_time hack
    $time_format = 'Y-m-d H:i:s';
    $set['update_time'] = date($time_format);
    // end of hack

    if ( ! is_null($set))
    {
        $this->set($set);
    }
            [...]
于 2013-03-10T14:44:53.947 に答える
0

mysqlの既存の機能を使用してupdate_time、レコードが挿入または更新されたときに列を自動更新できます。ただし、の更新はuser_id、アプリケーションから手動で行う必要があるものです。

他の要件は、一般的にソフト削除と呼ばれ、列のフラグを回して行を削除済みとしてマークします。これは可能ですが、すべての選択クエリと更新クエリが、このフラグがオンになっている行を回避していることを確認する必要があります。

アプリケーションのこれら2つの要件に準拠するように、モデルメソッドを注意深く構築することをお勧めします。おそらく、CIのコアモデルを拡張して、MY_Modelを拡張するすべての子クラスで使用されるカスタマイズされた更新/選択クエリを使用することができます。

于 2013-03-10T08:08:40.613 に答える