1

私は(codeigniterを使用して)多くのActiverecordを使用するプロジェクトに取り組んでいます。

私が直面している問題は次のとおりです。

データの配列を受け取り、次を使用していくつかのテーブルに入力する必要があります。

$this->db->insert('db_name', $data);

$ dataにテーブル内で使用できない要素が含まれている場合があるため、代わりに次のような操作を行う必要があります。

unset($data['action']);
unset($data['date']);

挿入する前、または特定のテーブルのまったく同じ要素を含む別の配列を作成するだけです。

$arr = array( 'x' => $data['x'])

以前にKohanaを使用しましたが、ORMを使用して挿入すると、特定のテーブルで使用できない要素が無視されることを知っています。

Codeigniterにそのようなものはありますか?

PS)外部ライブラリを使用せずに

4

2 に答える 2

1

私の知る限り、そのような組み込み機能は CI の Active Record には存在しません (ちなみに ORM ではありません)。

配列要素を手動で設定解除するのが面倒な場合、自動プロセスは次のようになります。

function my_insert ($table, $data) {
    $query = $this->db->query('SHOW columns FROM '.$table);
    $columns = array();
    foreach ($query->result_array() as $row) {
        $columns[] = $row['Field'];
    }

    foreach ($data AS $key => $value) {
        if (!in_array($key, $columns)) {
            unset($data[$key]);
        }
    }

    $this->db->insert($table, $data);
}

テストされておらず、他のチェックが必要になる場合がありますが、それは離陸に役立つはずです.

于 2012-12-19T14:14:58.987 に答える
1

CI ActiveRecord は ORM ではありません。codeignter で ORM を使用する場合、唯一のオプションサードパーティ ライブラリを使用することです: http://datamapper.wanwizard.eu/

配列を db に送信する前にいつでもループして、何も含まれていないデータを設定解除できます (実際にデリニエーターが空の要素である場合)。

foreach($data as $k => $v){
    if($v == ''){
        unset($data[$k]);
    }
}

それ以外の場合はswitch、データベースとデータを送信するページに基づいて要素を設定解除するスパゲッティを作成できます。

switch ($page){
    case "page1":
        unset($data['blah']);
    break;
    ....
}
于 2012-12-19T14:04:46.990 に答える