私のDBには2つのテーブルがあるとします。一つは、行としてFather_idPKとしてとFather_nameと父命名されます。私は行としてFKとしてFather_id子供PKとしてとChild_id、としての第2のテーブルを有し、CHILD_NAME。ループコード内の複数の挿入
子供たちは、父親と多人数の関係を持つでしょう。多くの子供から一人の父親。
コントローラでデータが次のようになっているとします。
Array([Father_id] => 1 [Children] => Array([0] => John [1] => Peter [2] => Michael))
私は右挿入するために、私のモデルに上記のデータを渡すしかし、私はちょうど挿入するために私のデータベースにそれを送ることができる方法でそれを再構築する必要があります。
foreach($data as $row){
for($temp = 0; $temp < count($data['Child_name']); $temp++){
$query[$temp] = array('Father_id' => $data['Father_id'], 'child_name' => $row[$temp]);
}
}
だから今、それはこのようになり、私はこれを挿入する方法を理解
Array([0]=>Array([Father_id] => 1 [Child_name] => John)[1]=>Array([Father_id] => 1 [Child_name] => Peter)[2]=>Array([Father_id] => 1 [Child_name] => Michael))
、私はちょうど別のforeachループを行う必要があるでしょうか、私はちょうど$query[$temp]
で$temp
を削除し、代わりに置くことができますそのループ内に挿入クエリを挿入します。
私の問題は、私は、各インサートは、データベースをチェックする以外、成功していることを知ることができるか、私はその唯一つのインサートが、その成功した場合、それは1
を返す場合のようにreturn文がしたいということですまた、複数の挿入を行うためのより良い方法はありますか?
UPDATE:私は戻ってきて、いくつかの変更を行ったいくつかの必要な休憩の後
。
これが今の私のモデル関数である:
public function insert_children($data){
foreach($data['child_name'] as $row){
$query = array('father_id' => $data['father_id'], 'child_name' => $row);
$result = $this->db->insert('children',$query);
}
//return something here
}
バックコントローラの右に何かを返すために不可欠ですか?たとえば、挿入が成功したかどうかを返すことができます。だから、これのためにcodeigniterにすでに作られている関数はありますか?または私は自分自身を作る必要がありますか?
例えば、私はちょうど、挿入が成功するたびに増分値が含まれており、3人の子供の価値があるのであればcount($data['children'])
にループの最後にそれを比較する$temp
変数を作ることができますが私は、複数のデータ
$data = array(
array('father_id'=> 'id', 'child_name' => 'Unni'),
array('father_id'=> 'id', 'child_name' => 'Kuttan'),
//...
);
$this->db->insert('mytable', $data);
return文では、if文を使って$ error []が空であるかどうかをチェックしてからtrueを返します。それ以外の場合は$ errorを返します。 – John
はい、あなたはそのようなエラーの条件付きにすることができます –
私は最近の変更がこれに戻ったのであなたの答えを受け入れました。クエリが配列としてデータを読み取るので、複数の値(配列)を持つ1 dbクエリを使用することは不可能です。 – John