2

GroceryCrud には 1 つの問題があります。

1 つのテーブルにデータを挿入したい。テーブルは次のようになります。

id, card_no, site_code, site_no

card_noはユニークで、私はそれを実装しました。

でも; 私の問題は、両方の値が一致する場合にのみ、 site_codesite_noを一意にする必要があることです。つまり、site_code101で、site_no102であり、両方に同じ値を再度挿入しようとすると、拒否されます。値の 1 つが異なる場合は、それを許可する必要があります。

この場合、挿入時に両方の値を 1 つとして扱います。

私がはっきりしていることを願っています。

前もって感謝します。

4

3 に答える 3

3

テーブル デザイン ログインとは別に、カスタム コールバック関数を作成して、データベース内のこれらの値の存在を確認できます。検証は、site_code などの 2 つのフィールドのいずれかで行われます。

public function _unique_code_no($site_code)
{
    $CI =& get_instance();
    $CI->form_validation->set_message('_unique_code_no', 'the values must be unique');
    $site_no=$CI->input->post('id');
    $query=$CI->db->query("select 1 from mytable where site_no=$site_no and site_code=$site_code");
    if ($query->num_rows==0){
        return TRUE;
    }else{
        return FALSE;
    }
}

そして検証ルール:

$this->form_validation->set_rules('site_code', 'Site code', 'required|_unique_code_no');
于 2013-03-19T12:13:07.133 に答える
0

メソッドを使うべきだと思いますcallback_column( string $column , mixed $callback )。このリンクのコールバック列を確認してください

于 2013-03-19T09:14:49.077 に答える
0

テーブルの制約を確認する必要があるようです。

この場合、id 列を使用する正当な理由はありますか? 存在しない場合は、それを削除してから、site_code と site_no の両方を主キーとして設定する必要があります。

(site_code,site_no) を主キーとして使用すると、これら 2 つの値の重複を挿入できなくなります。

于 2013-03-19T08:47:16.960 に答える