TYPO3将uid设置为新模型

问题描述 投票:1回答:3

简单的问题:如何将uid设置为新模型? TYPO3 8.7.17。我试过添加方法

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

我假设我正在创建一个自定义扩展,我想将uid保存在新模型中但模型不能保存。我知道不推荐。但我有原因,我需要它。

我需要id,因为用户每天都会从csv导入数据。我有相关数据。当用户进行导入uid正在改变。我也不能指定日期。

php typo3 typo3-8.x
3个回答
1
投票

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


0
投票

如果我没有弄错,函数setUid()已经存在于模型中,通常它只是在你自己的模型类扩展的类中。 因此,您可以使用setUid(),而无需在自己的模型类中编写它。

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

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


0
投票

我这样做了一个简单的行查询,如下所示:

$GLOBALS['TYPO3_DB']->sql_query(
            'INSERT INTO my_table (uid,title,pid)
              VALUES ('.$id.',"'.$title.'",'.$storagePid.')'
        );
© www.soinside.com 2019 - 2024. All rights reserved.