TYPO3 将 uid 设置为新模型

TYPO3 set uid to new model

简单问题:如何设置新模型的uid?错别字 3 8.7.17。 我尝试添加方法

public function setUid($uid)
{
   $this->uid = $uid;
}

我假设我正在创建自定义扩展并且我想将 uid 保存在新模型中 但是模型没有保存。我知道不推荐。但我有理由需要它。

我需要 id,因为用户每天都从 csv 导入数据。我有相关数据。当用户使导入 uid 发生变化时。我也无法指定日期。

函数setUid()如果我没记错的话已经存在于模型中,通常它只是在你自己的模型扩展的class中-class.
因此,您可能已经可以使用 setUid() 而无需将其写入您自己的模型-class.

主要问题是 uid 是一个 auto_increment、索引和主键,因此您必须确保 uid 的新值始终是唯一的。
此外,setUid() 的个人使用可能仍以某种方式在 TYPO3 中被阻止。

对于与导入相关的挑战,存在扩展 external_import,这可能是您所需要的。

设置 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

我用这样一个简单的行查询来做到这一点:

$GLOBALS['TYPO3_DB']->sql_query(
            'INSERT INTO my_table (uid,title,pid)
              VALUES ('.$id.',"'.$title.'",'.$storagePid.')'
        );

从 t3 8 开始你可以(应该)使用学说:

$connectionPool=GeneralUtility::makeInstance(ConnectionPool::class);
$queryBuilder = $connectionPool->getQueryBuilderForTable($table);
$queryBuilder
    ->insert($table)
    ->values([
       'name' => $name,
       'crdate' => time(),
       'pid' => $pid,
       'uid' => $uid        
])
->execute();

简单标准。即使在 t3.