2016-01-13 28 views
1

我正在使用PHP API在FileMaker中插入記錄。我還需要將相關數據插入到單獨的表中,因此我需要從創建的新記錄中提取記錄標識,以便可以將該標識包含在相關表的新記錄中。FileMaker PHP API ..獲取新創建記錄的ID ..?

這裏是我的工作:

$fm = new FileMaker('PayPal_IPN', FM_HOST, FM_USER, FM_PASS); 
$new_ipn_record = $fm->createRecord('ipn_transactions', $ipn_record_data); 
$new_ipn_record_result = $new_ipn_record->commit(); 

這部分工作正常,並增加了新的記錄到的FileMaker。所以現在我需要獲得剛剛創建的記錄的ID。我想這...

$new_ipn_record_id = $new_ipn_record_result->getLastRecord()->getRecordID(); 

但我結束了一個錯誤......

呼叫到一個非對象

的任何信息,在成員函數getLastRecord()我在做什麼錯在這裏將不勝感激。謝謝!

+1

無關你的問題,但你應該不要使用內部生成的RecordID作爲匹配字段。當您將解決方案遷移到新文件併爲每個已刪除記錄獲取副本時,它會咬你。請改用自動輸入的序列號字段。 –

回答

1

$ new_ipn_record_result是一個布爾值而不是對象。我想你需要嘗試:

$new_ipn_record_id = $new_ipn_record->getRecordID(); 
+0

這不起作用,這對我有意義。 $ new_ipn_record尚未提交。 $ new_ipn_record_result是該提交的結果,這是加載記錄的位置。實際上,我認爲它可能與createRecord()和newAddCommand()的差異有關。現在看看。 –

+0

你提交後在$ new_ipn_record上嘗試了getRecordID()嗎?就我所知而言,commit()的結果是布爾值,而不是記錄。 –

+0

啊,對。是的,它確實有效。謝謝! –

1

另一種選擇:

commiting新記錄獲得的所有記錄,並期待在最後一條記錄後:

$query = $fm->newFindAllCommand('ipn_transactions'); 
$result = $query->execute(); 
$records = $result->getRecords(); 
$new_ipn_record_id = $records->getLastRecord()->getRecordID(); 
+0

這種方法有可能會在記錄相互靠近時產生錯誤的結果。 –

+0

的確如此。您可以嘗試在添加新記錄之前計數(getRecords()),在提交新記錄後將其增加1,並使用getRecords(),而不是使用遞增的計數結果從新的getRecords()結果中檢索記錄。 –