场景:
ContactPerson与FrontendUser有关系,并且是关系的拥有方。现在我遇到了以下问题:
我正在根据处于活动状态的ContactPersons激活/停用FrontendUsers。当FrontendUser被禁用或删除时,即使两个存储库都忽略enable字段,contactPerson->getFrontendUser()的结果也为null:
/** @var Typo3QuerySettings $querySettings */
$querySettings = $this->objectManager->get(Typo3QuerySettings::class);
$querySettings->setIgnoreEnableFields(true);
$querySettings->setRespectStoragePage(false);
$this->frontendUserRepository->setDefaultQuerySettings($querySettings);
$debugContactPerson = $this->contactPersonRepository->findOneByContactPersonIdAndIncludeDeletedAndHidden('634');
$debugFrontendUser = $this->frontendUserRepository->findOneByUid(7);
\TYPO3\CMS\Extbase\Utility\DebuggerUtility::var_dump(
array(
'$debugContactPerson' => $debugContactPerson,
'$debugFrontendUser' => $debugFrontendUser,
)
);
结果:
![DebugResult](https://istack.dev59.com/YCIxE.webp)
$this->frontendUserRepository->findByUid(7);
也不起作用,因为它没有使用查询,而是使用persistenceManager->getObjectByIdentifier(...
,当然忽略了查询设置。问题在于,在我的真实代码中,我无法使用findOneByUid(),因为我无法获取contact_person字段中的整数值(uid)。
有没有办法在不使用原始查询获取contact_person行的情况下解决这个问题?
我的(是的,原始查询)解决方案:
因为我不想编写自己的QueryFactory,也不想向我的contactPerson添加冗余字段,所以我现在使用了一个原始语句来解决这个问题。也许它可以帮助有同样问题的人:class FrontendUserRepository extends \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
{
/**
* @param \Vendor\ExtKey\Domain\Model\ContactPerson $contactPerson
* @return Object
*/
public function findByContactPersonByRawQuery(ContactPerson $contactPerson){
$query = $this->createQuery();
$query->statement(
"SELECT fe_users.* FROM fe_users" .
" LEFT JOIN tx_extkey_domain_model_contactperson contact_person ON contact_person.frontend_user = fe_users.uid" .
" WHERE contact_person.uid = " . $contactPerson->getUid()
);
return $query->execute()->getFirst();
}
}