简单的问题:如何将uid设置为新模型? TYPO3 8.7.17。我试过添加方法
public function setUid($uid)
{
$this->uid = $uid;
}
我假设我正在创建一个自定义扩展,我想将uid保存在新模型中但模型不能保存。我知道不推荐。但我有原因,我需要它。
我需要id,因为用户每天都会从csv导入数据。我有相关数据。当用户进行导入uid正在改变。我也不能指定日期。
设置uid
不是那么容易,但是你可以使用\TYPO3\CMS\Extbase\Persistence\Generic\Mapper\DataMapper
从给定的数据数组创建实体实例。
$data = [
'uid' => 10101,
'title' => 'Foo Bar Baz',
…
];
$dataMapper = GeneralUtility::makeInstance(ObjectManager::class)
->get(DataMapper::class);
$obj = reset($dataMapper->map(YourModel::class, [data]));
或者您只需创建一个新的模型实例并使用Reflection来更改uid属性:
$obj = new YourEntity();
$refl = new ReflectionClass(YourEntity::class);
$refl->getProperty('uid')->setValue($obj, '10101');
在导入的情况下,我更喜欢前一种方式,因为您需要将数据映射到实例,这就是DataMapper的用途。
换句话说,你可能会看看here
如果我没有弄错,函数setUid()
已经存在于模型中,通常它只是在你自己的模型类扩展的类中。
因此,您可以使用setUid()
,而无需在自己的模型类中编写它。
主要问题是uid
是一个auto_increment
,索引和主键,因此你必须确保uid的新值始终是唯一的。
此外,在TYPO3中,setUid()
的个人使用可能仍会被某种方式阻止。
对于与进口相关的挑战,存在扩展external_import,这可能是您所需要的。
我这样做了一个简单的行查询,如下所示:
$GLOBALS['TYPO3_DB']->sql_query(
'INSERT INTO my_table (uid,title,pid)
VALUES ('.$id.',"'.$title.'",'.$storagePid.')'
);