2017-12-09 7 views
0

私の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); 

答えて

0

あなたはを使用することができますを挿入するために1 $temp = 1;

+0

return文では、if文を使って$ error []が空であるかどうかをチェックしてからtrueを返します。それ以外の場合は$ errorを返します。 – John

+0

はい、あなたはそのようなエラーの条件付きにすることができます –

+0

私は最近の変更がこれに戻ったのであなたの答えを受け入れました。クエリが配列としてデータを読み取るので、複数の値(配列)を持つ1 dbクエリを使用することは不可能です。 – John

1

のような一般的な方法でそれを指定した場合、$ tempが宣言に応じて、3または2でなければなりません各ループ項目の機能は、データが挿入されているかどうかを確認するだけで挿入されていないデータのためのエラーメッセージを返すように:

foreach($data as $row) { 
    for($temp = 0; $temp < count($data['Child_name']); $temp++){ 
     // note that I remove [$temp] below 
     $query = array('Father_id' => $data['Father_id'], 'child_name' => $row[$temp]); 
     $this->db->query($query); 
     if($this->db->affected_rows() == 0) // data not inserted, return error message 
     { 
      $error[] = $row[$temp]; 
     } 
    } 
} 

// shows error if one or more child name is not inserted 
if (isset($error)) { 
    foreach ($error as $child_name) { 
     echo $child_name . ' is not inserted'; 
    } 
} 
+0

私の目標でした。私の問題は、どのように私は私の配列をこれに再構成するのですか? – John

+0

私はforeachループにそれを挿入していないと思います。不活性値は「アレイ」として表示されるため、挿入することはできません。これはエラーになります。 – John