Demo

討論

保持飢餓,保持愚笨 (Stay hungry, stay foolish)。 史蒂夫·賈伯斯

公告

本網站已取消討論區的討論方式,如果您有問題請至LINE群行動條碼圖片網址,或Facebook社團

關於JTable取得資料表id問題

  • maro
  • maro 的個人頭像 Topic Author
  • 訪客
  • 訪客
2012-01-04 16:54 #21492 來自 maro
maro created the topic: 關於JTable取得資料表id問題
各位好,我想請教一個關於資料庫操作的問題
我必須寫一個元件,而這個元件必須依序在兩張表作insert或update
假設是table A與table B吧,因為這兩張表需要記錄其關聯性(雖然無須join)

因此,如果是insert的情形時,會先insert table A,並取得這次insert的資料行id值
並把這個id值記錄到table B的某個欄位

如此,未來有需要更新table B時(只更新table A則無需處理)
才能順道更新table A

然而目前我對JTable的了解,因為insert與update都是以store來處理
而且where條件似乎只能用在id欄位上?
我原有第二個方案,在新增資料時產生一個唯一戳記,並將戳記值記錄在table A與table B
不知道這方法能不能通

我是比較希望能找到隨著insert動作直接傳回max id的方法
因為若是insert完成後再取id,在使用者繁多,不斷有人進行insert時,可能會有問題

以上問題請教各位,謝謝

Please 登入 to join the conversation.

More
2012-01-04 17:17 #21493 來自 asika32764
asika32764 replied the topic: 關於JTable取得資料表id問題
你需要兩個繼承自 JTable 的物件

假設
$tableA = JTableContent ;
$tableB = JTableContentDetail ;

你的 tableB 要另外有一個conentid用來對照用,此contentid不能設為 primary key 也不能設成 auto increment

第一個物件 $tableA->store() 之後,last id 會存進 $tableA->id 中

接下來
$tableB->contentid = $table->id;
$tableB->store();
即可

參考程式碼:
$post = JRequest::get('post');   // array

$tableA = JTable::getInstance( 'Content' );
$tableB = JTable::getInstance( 'ContentDetail' );

$tableA->bind( $post );
$tableB->bind( $post );

$tableA->check();
$tableA->store(); // now, last id saved in object.

$tableB->contentid = $tableA->id ;
$tableB->check();
$tableB->store();



或者你可以考慮直接用SQL來寫

只要用php的 mysql_insert_id() 或 Joomla! API: $db->insertid() 就能取得本次連線最後一個新增的id,不受其他連線影響,因此兩個使用者不會衝突

飛鳥新樂園 - http://blog.asikart.com
大學好好玩 - http://funni.cc
Joomla!123教學網 - http://joomla123.com.tw

Please 登入 to join the conversation.

  • maro
  • maro 的個人頭像 Topic Author
  • 訪客
  • 訪客
2012-01-04 19:28 #21495 來自 maro
maro replied the topic: 關於JTable取得資料表id問題
已解決,謝謝 :sohigh:

Please 登入 to join the conversation.