Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 类型3将uid设置为新型号_Php_Typo3_Typo3 8.x - Fatal编程技术网

Php 类型3将uid设置为新型号

Php 类型3将uid设置为新型号,php,typo3,typo3-8.x,Php,Typo3,Typo3 8.x,简单问题:如何为新模型设置uid?类型3 8.7.17。 我尝试了添加方法 public function setUid($uid) { $this->uid = $uid; } 我假设我正在创建一个自定义扩展,并希望将uid保存在一个新模型中 但这种模式并没有节约。我知道这是不推荐的。但我有理由需要它 我需要id,因为用户每天都从csv导入数据。我有相关数据。当用户进行导入时,UID正在更改。我也不能指定日期。如果我没有弄错的话,函数setUid()已经存在于模型中,通常它只是在

简单问题:如何为新模型设置uid?类型3 8.7.17。 我尝试了添加方法

public function setUid($uid)
{
   $this->uid = $uid;
}
我假设我正在创建一个自定义扩展,并希望将uid保存在一个新模型中 但这种模式并没有节约。我知道这是不推荐的。但我有理由需要它

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

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

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


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

设置
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]));
或者您只需创建模型的新实例并使用更改uid属性:

$obj = new YourEntity();
$refl = new ReflectionClass(YourEntity::class);

$refl->getProperty('uid')->setValue($obj, '10101');
在导入的情况下,我更喜欢前一种方式,因为您需要以某种方式将数据映射到实例,这就是DataMapper的用途


另一方面,您可以看看

我使用了一个简单的行查询,如下所示:

$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中。

我假设您正在创建自定义扩展,并且希望将uid保存在模型中,不是吗?这正是我需要的。您应该详细说明[您]需要它的原因。否则,我们无法确定是否有更好的解决方案。如何在数据库中存储具有操纵uid的对象?我尝试通过存储库设置uid,但从来没有设置过……老实说,我放弃了使用typo3,这太疯狂了,我很高兴我已经忘记了这个问题;)嗯,虽然Extbase有时仍在运行,但TYPO3在每个版本中都变得越来越干净和更好。对于大型CMS平台,IMHO是最好的选择。为了解决这个问题,我使用了我自己的查询-查看我的答案。如果我没有弄错的话,这不应该在t3 9+上工作?…对,除非你安装“typo3db_legacy”扩展名$GLOBALS['TYPO3_DB']在V9中不再受支持。而且t3疯狂了…我过来了,因为我想克隆一个对象,我认为这不是太多的要求,但在t3你只是不能,除非你黑客或有扩展…