添加到存储库后获取对象的UID

时间:2016-07-13 12:00:26

标签: typo3 extbase

所以我试图用Typo3设置我的第一个扩展,我非常挣扎。我想设置一个处理客户回收的扩展程序。

在提交输入值之后,我将新客户存储在数据库中,并且在此步骤之后,我将直接从数据库中取回它以查看他拥有的uid,以存储来自客户的uid在填海工程中。

所以我不想用

覆盖当前的$customer-variable
$customer = $this->customerRepository->findByName($name);

返回的结果实际上并不是客户的对象,即使var_dump说它是客户对象。我无法调用该函数

$customer->getUid()

获取此新客户的当前uid。但我需要在我的回收对象中使用客户的uid - 我该怎么做?

下一个问题:每个查询都会对数据库执行

->findAll(), findByIdentifier($identifier)

null

我不知道为什么。他似乎无法找到storagePid,但我已经正确设置了TypoScript。

我只能在添加

时收到查询
$query->getQuerySettings()->setRespectStoragePage(FALSE);

在这种情况下狗被埋葬的任何想法?

非常感谢,抱歉我的英语不好:P

1 个答案:

答案 0 :(得分:9)

如果没有更多细节,您的初始问题很难回答。客户与填海工程之间的关系是什么?如果客户可以进行多次回收,那么在客户和回收之间建立1:n的关系会很好。在这种情况下,您可以执行$customer->addReclamation($reclamation)并且不需要关注用户UID。

至于您的存储库调用,问题是您的调用会获得包含所有匹配对象的QueryResult。如果name确实是一个独特的属性,则可以执行

$customer = $this->customerRepository->findOneByName($name);

这将查找名称等于$name的所有客户(应该只有一个)并返回第一个客户,这样您就可以获得Customer个对象。

但这也不是必要的:如果在添加客户后坚持所有更改,您可以获得其UID:

$this->customerRepository->add($customer);
$this->persistenceManager->persistAll();
// Returns the customer uid
$customerUid = $customer->getUid();

可以像这样注入persistenceManager:

/**
 * @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
 * @inject
 */
protected $persistenceManager;