TYPO3 Extbase:InversedBy 1:1 关系
TYPO3 Extbase: InversedBy 1:1 Relation
是否可以在不向 Extbase 中的数据库中添加第二个字段的情况下反转 1:1 关系?
示例:
分机有联系人,可以有 fe_user。
Contact-Person-Domain-Model 是关系的拥有站点。
现在您可以使用$contactPerson->getFrontendUser();
有没有办法在不将其添加到数据库的情况下将反向 属性 添加到 FrontendUser?
所以你可以使用 $frontendUser->getContactPerson()
,
甚至更重要的是:$frontendUserRepository->findByContactPerson()
;
我尝试将 属性 添加到 FrontendUser-Model:
/**
* FrontendUser
*/
class FrontendUser extends \TYPO3\CMS\Extbase\Domain\Model\FrontendUser
{
/**
* @var \Vendor\ExtKey\Domain\Model\ContactPerson
*/
protected $contactPerson = null;
}
并覆盖 fe_users TCA:
$GLOBALS['TCA']['fe_users']['columns']['contact_person'] = array(
'exclude' => 1,
'label' => 'LLL:EXT:ExtKey/Resources/Private/Language/locallang_db.xlf:tx_ExtKey_domain_model_contactperson',
'config' => array(
'type' => 'inline',
'foreign_table' => 'tx_ExtKey_domain_model_contactperson',
'foreign_field' => 'frontend_user',
'minitems' => 0,
'maxitems' => 1,
),
);
但是当我打电话时:
/**
* The repository for Customers
*/
class FrontendUserRepository extends \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
{
/**
* @param \Vendor\ExtKey\Domain\Model\ContactPerson $contactPerson
* @param boolean $ignoreEnableFields
* @param boolean $respectStoragePage
* @return object
*/
public function findByContactPerson(ContactPerson $contactPerson, $ignoreEnableFields = false, $respectStoragePage = true){
$query = $this->createQuery();
$query->getQuerySettings()
->setIgnoreEnableFields($ignoreEnableFields)
->setRespectStoragePage($respectStoragePage);
$query->matching($query->equals('contactPerson', $contactPerson));
return $query->execute()->getFirst();
}
}
它创建以下 SQL-错误:
Unknown column 'fe_users.contact_person' in 'where clause'
计算双向 1:1 关系在 TYPO3 中不受支持,只有 m:n 关系支持额外的 definition in TCA - 这也需要在关系的相对站点上的附加字段.
关于您的情况,您必须自己在扩展的 FrontendUser
域模型中创建额外的 属性 和数据库字段。
有可能像这里描述的那样:http://www.oliver-weiss.com/blog/einzelansicht/article/relationen-in-typo3-teil-1-11-relation/News/detail/。此外,不是在两侧都具有“内联”关系,如果只有一侧是“内联”而另一侧是“select”,这也有效。但是单个(倒置的)“内联”关系需要定义“foreign_field”。在此之后,“外部”uid 仅存储在关系的一侧。
是否可以在不向 Extbase 中的数据库中添加第二个字段的情况下反转 1:1 关系?
示例: 分机有联系人,可以有 fe_user。 Contact-Person-Domain-Model 是关系的拥有站点。
现在您可以使用$contactPerson->getFrontendUser();
有没有办法在不将其添加到数据库的情况下将反向 属性 添加到 FrontendUser?
所以你可以使用 $frontendUser->getContactPerson()
,
甚至更重要的是:$frontendUserRepository->findByContactPerson()
;
我尝试将 属性 添加到 FrontendUser-Model:
/**
* FrontendUser
*/
class FrontendUser extends \TYPO3\CMS\Extbase\Domain\Model\FrontendUser
{
/**
* @var \Vendor\ExtKey\Domain\Model\ContactPerson
*/
protected $contactPerson = null;
}
并覆盖 fe_users TCA:
$GLOBALS['TCA']['fe_users']['columns']['contact_person'] = array(
'exclude' => 1,
'label' => 'LLL:EXT:ExtKey/Resources/Private/Language/locallang_db.xlf:tx_ExtKey_domain_model_contactperson',
'config' => array(
'type' => 'inline',
'foreign_table' => 'tx_ExtKey_domain_model_contactperson',
'foreign_field' => 'frontend_user',
'minitems' => 0,
'maxitems' => 1,
),
);
但是当我打电话时:
/**
* The repository for Customers
*/
class FrontendUserRepository extends \TYPO3\CMS\Extbase\Domain\Repository\FrontendUserRepository
{
/**
* @param \Vendor\ExtKey\Domain\Model\ContactPerson $contactPerson
* @param boolean $ignoreEnableFields
* @param boolean $respectStoragePage
* @return object
*/
public function findByContactPerson(ContactPerson $contactPerson, $ignoreEnableFields = false, $respectStoragePage = true){
$query = $this->createQuery();
$query->getQuerySettings()
->setIgnoreEnableFields($ignoreEnableFields)
->setRespectStoragePage($respectStoragePage);
$query->matching($query->equals('contactPerson', $contactPerson));
return $query->execute()->getFirst();
}
}
它创建以下 SQL-错误:
Unknown column 'fe_users.contact_person' in 'where clause'
计算双向 1:1 关系在 TYPO3 中不受支持,只有 m:n 关系支持额外的 definition in TCA - 这也需要在关系的相对站点上的附加字段.
关于您的情况,您必须自己在扩展的 FrontendUser
域模型中创建额外的 属性 和数据库字段。
有可能像这里描述的那样:http://www.oliver-weiss.com/blog/einzelansicht/article/relationen-in-typo3-teil-1-11-relation/News/detail/。此外,不是在两侧都具有“内联”关系,如果只有一侧是“内联”而另一侧是“select”,这也有效。但是单个(倒置的)“内联”关系需要定义“foreign_field”。在此之后,“外部”uid 仅存储在关系的一侧。