2016-01-13 51 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()结果中检索记录。 –