所以我试图用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
答案 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;