TYPO3 获取最新插入的数据id
2018-11-23 本文已影响0人
是彬不是杉
原文链接:https://www.whongbin.cn/index/article/detail/id/29.html
TYPO3 获取最新插入的数据uid
typo3是德国人开发的一套易用型CMS,采用插件方式拼装系统,系统完全面向对象,当然原生SQL也可以用来处理部分数据,这篇文章分享下typo3中怎么样获取新插入数据的ID
插入对象时获取方式
上面已经说了,typo3是完全面向对象的,在typo3中,对于一对一、一对多、多对一、多对多的关系有着非常友好的处理方式
/**
* action create
*
* @param \Whb\ExtensionName\Domain\Model\Files $newFiles
* @return void
*/
public function createAction(\Whb\ExtensionName\Domain\Model\Files $newFiles)
{
#...数据插入代码...
$newFiles->setTitle('demo');
$this->addFlashMessage('添加成功!', '', \TYPO3\CMS\Core\Messaging\AbstractMessage::WARNING);
$this->filesRepository->add($newFiles);
//主要是下面两句
$persistenceManager = $this->objectManager->get(\TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager::class);
$persistenceManager->persistAll();
$newDataId = $newFiles->getUid();
var_dump($newDataId);//返回新增数据的主键uid
//$this->redirect('list');
}
使用助手SQL函数进行插入时
虽然说typo3是完全面向对象的,但是也免不了有时会出现特殊情况,这时候就可以使用typo3自带的SQL助手函数来插入数据
//添加一條纪录
$datas = array();
$datas["items"]= 2;
$datas["getnum"]= 3;
$datas["usednum"]= 0;
$datas["userid"]= 1;
$datas["crdate"]= time();
$datas["pid"]= 110;
$GLOBALS['TYPO3_DB']->exec_INSERTquery("tx_demo_domain_model_table", $datas);
$newDataUid = $GLOBALS['TYPO3_DB']->sql_insert_id();
使用原生MySQL插入时
在typo3中,我们依然可以使用原生MySQL进行插入数据,如处理远程api中数据修改时,例如支付宝的支付回调,就可以用到下面方法进行处理,免去繁琐的model类继承,但是需要自己写MySQL连接池
$con = new mysqli($config['host'],$config['user'],$config['password'],$config['dbname']);
if(!$con){
die("connect error:".mysqli_connect_error());
}
//方法一 使用last_insert_id
$query = "select last_insert_id()";
$newDataUid = $con->execute($query);
//第二种
$query = "select max(uid) from table";
$newDataUid = $con->execute($query);
注意:所有返回自增ID只能是insert操作,而不是update操作