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

1 typo3 extbase

所以我试图用Typo3设置我的第一个扩展,我非常努力.我想设置一个扩展来处理客户的填海工程.

在提交输入值之后,我将新客户存储在数据库中,并且在此步骤之后,我将直接从数据库中取回它以查看他具有哪个uid,以便在回收中存储来自客户的uid.

所以我不想覆盖当前$customer-variable

$customer = $this->customerRepository->findByName($name);
Run Code Online (Sandbox Code Playgroud)

返回的结果实际上并不是客户的对象,即使var_dump它是客户对象.我无法调用该功能

$customer->getUid()
Run Code Online (Sandbox Code Playgroud)

获得这个新客户的当前uid.但我需要在我的回收对象中使用客户的uid - 我该怎么做?

下一个问题:每次查询我都会对db做

->findAll(), findByIdentifier($identifier)
Run Code Online (Sandbox Code Playgroud)

null.

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

我添加时只能查询

$query->getQuerySettings()->setRespectStoragePage(FALSE);
Run Code Online (Sandbox Code Playgroud)

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

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

lor*_*enz 9

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

至于您的存储库调用,问题是您的调用会获得包含所有匹配对象的QueryResult.如果name真的是一个独特的财产,你可以做到

$customer = $this->customerRepository->findOneByName($name);
Run Code Online (Sandbox Code Playgroud)

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

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

$this->customerRepository->add($customer);
$this->persistenceManager->persistAll();
// Returns the customer uid
$customerUid = $customer->getUid();
Run Code Online (Sandbox Code Playgroud)

persistenceManager可以像这样注入:

/**
 * @var \TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
 * @inject
 */
protected $persistenceManager;
Run Code Online (Sandbox Code Playgroud)