3

アクティブなレコードまたは手動の sql を使用してこれを処理する方法がわかりません。私がしたいのは、自動インクリメントされたIDを持つ「連絡先」テーブルにレコードを追加し、対応する「連絡先」レコードIDのIDを持つ「注文」テーブルにレコードを追加することです。

$this->db->insert_id() を使用して、挿入された連絡先レコードの ID を取得できることは知っていますが、それはアクティブなレコードを使用している場合にのみ機能しますか?

また、このタイプの挿入を 1 つのクエリで実行できますか、それとも 2 つに分割する必要がありますか?

4

3 に答える 3

3

$this->dbアクティブ レコードを参照しません。Active Record を使用することを選択する必要があります$this->db。単にデータベース抽象化レイヤーを指します。

とはいえ$this->db->insert_id()、クエリの直後 (アクティブ レコードかどうかに関係なく) を使用して、その挿入 ID を取得できます。

しかし、互いの ID に依存する複数のレコードを一度に挿入する処理を行うには、テーブル タイプとして InnoDB に切り替え (まだ行っていない場合)、CodeIgniter のtransactionsを使用します。

CodeIgniter のドキュメントから改作した例を次に示します。

$this->db->trans_start();

$this->db->query('INSERT INTO table1 VALUES(id,field1,field2)');
$table1_id = $this->db->insert_id();

$this->db->query('INSERT INTO table2 VALUES(id,' . $table1_id . ',field2,field3)');

$this->db->trans_complete(); 
于 2012-09-17T17:18:56.710 に答える
1

Codeigniter によると、これ$this->dbは「アクティブ レコード」[原文のまま!] という名前になっているため、これらの用語で自分の質問に既に回答しています。それ以外の場合は、 "Active Record"と書くことで、実際にどのようなことを意味するかを指定する必要があります。

PHP では、Mysqli 拡張機能により、複数のクエリを一度に実行できます: mysqli::multi_queryDocs .

最後の挿入 ID 関数は Mysql 自体にも存在し、任意の SQL クエリ内で使用でき、LAST_INSERT_ID()Mysql Docsと呼ばれます。

INSERT INTO contact;
INSERT INTO order SET contact_ID = LAST_INSERT_ID();

多分これはあなたが探している情報です。

于 2012-09-17T16:33:55.493 に答える