1

ちょっと問題があります。私が望むのは、テーブルに外部キー値を挿入することだけです。これが私のmysqlのテーブル作成ステートメントです。

CREATE TABLE `sales` (
 `sales_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `fkmember` INT(10) UNSIGNED NOT NULL,
 `date_of_sales` DATETIME NOT NULL,
 PRIMARY KEY (`sales_id`),
 INDEX `fkmember` (`fkmember`),
 CONSTRAINT `sales_ibfk_1` FOREIGN KEY (`fkmember`) REFERENCES `member` (`member_id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=3;


CREATE TABLE `sales_line` (
 `line_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
 `fkproduct` INT(10) UNSIGNED NOT NULL,
 `fksales` INT(10) UNSIGNED NOT NULL,
 `quantity_purchased` INT(10) UNSIGNED NOT NULL,
 `subtotal` FLOAT(7,2) UNSIGNED NOT NULL,
 PRIMARY KEY (`line_id`),
 INDEX `fkproduct` (`fkproduct`),
 INDEX `fksales` (`fksales`),
 CONSTRAINT `sales_line_ibfk_1` FOREIGN KEY (`fkproduct`) REFERENCES `product` (`product_id`),
 CONSTRAINT `sales_line_ibfk_2` FOREIGN KEY (`fksales`) REFERENCES `sales` (`sales_id`)
) 

私のテーブル構造:

販売表 sales_id | fkメンバー| 販売日 |

sales_line テーブル line_id | fk製品| fkセールス| 購入数量 | 小計 |

2つのテーブルに値を挿入する際の私のコード:

foreach($products as $p){
        $data = array(
            'sales_id' => null,
            'fkmember' => $memberid
            'name' => $p['product_name']
        );
        $this->db->insert('sales',$data);
    }
   foreach($products as $p){
        $data = array(
            'line_id' => null,
            'fk_product' => $p['id'],
            'fk_sales' => null,
            'quantity_purchased' => $p['product_qty'],
            'subtotal' => number_format($subtotal,2)
        );
        $this->db->insert('sales_line',$data);
    }
    } 

fk_sales に値を挿入する際に、値の挿入にエラーがあることはわかっています。sales テーブルの ID から取得した値をこのフィールドに挿入するにはどうすればよいですか? この 2 つのテーブルを 1 回のラウンドで挿入したいからです。みんな助けてください。ありがとう

4

3 に答える 3

2

これを試してください(の使用に注意してください$this->db->insert_id()):

    foreach($products as $p){
        $data = array(
            'sales_id' => null,
            'fkmember' => $memberid
            'name' => $p['product_name']
        );
        $this->db->insert('sales',$data);
    }

    $sales_insert_id = $this->db->insert_id();

    foreach($products as $p){
        $data = array(
            'line_id' => null,
            'fk_product' => $p['id'],
            'fk_sales' => $sales_insert_id,
            'quantity_purchased' => $p['product_qty'],
            'subtotal' => number_format($subtotal,2)
        );
        $this->db->insert('sales_line',$data);
    }
于 2012-09-26T05:07:23.757 に答える
0

こちらのCodeigniter Database Helper ガイドをご覧ください。最初の関数は $this->db->insert_id(); です。

したがって、これを次のように使用できます。

 $this->db->insert('sales',$data);
 $fk_sales_id = $this->db->insert_id();
于 2012-09-26T04:42:45.120 に答える
0

コントローラー関数で、最初に販売エントリを挿入し、販売 ID を返します。次に、返された ID を使用して、以下のように販売行を挿入します。

Eg: 
//Controller function

  //insert the sales record and get the sales id
  $sales_id = $this->model_sale->insert_sale($mameber_id, $product_name); 

foreach($products as $p)
{
  //insert sales line
  $this->model_sales_line->insert_sales_line($sales_id, $p['id'],$p['product_qty'],$sub_total);
}

//Sales Model

public function insert_sale($mameber_id, $product_name)
{
 $data = array(            
        'fkmember' => $memberid
        'name' => $p['product_name']
    );
    $this->db->insert('sales',$data);

   return $this->db->insert_id();
}

正しい場合は、答えを受け入れることを忘れないでください。

于 2012-09-26T06:46:09.050 に答える