TLDR: 我有两个带有MM关系的模型,这些模型具有通过模板中的Constants定义的不同StoragePid。 在查询有关我的相关模型的已配置storagePid的数据时,我不知道如何过滤结果。
长版: 在我的多站点TYPO3安装中,我有两个模型“ Person”和“ PersonalInformation”。这些模型具有通过TCA定义的MM关系。 “人员”包含所有常规数据,存储在全局RecordStore中。 “个人信息”包含可编辑的数据,即每个站点分别可编辑的图像。这些数据存储在每个站点下的单独RecordStore中。
这意味着在每个site-template-> Constants中,我定义了extension-storagePid,即:$ plugin.tx_myext.persistence.storagePid = 1 此配置在所有站点上都相同,以便能够从每个站点访问相同的RecordStore。
每个站点的“ PersonalInformation”的RecordStore应该不同。所以我的扩展程序的setup.txt看起来像:
persistence {
storagePid = {$plugin.tx_myext.persistence.storagePid},
{$plugin.tx_tx_myext.persistence.personalInformationStoragePid}
classes {
TYPO3\T3myext\Domain\Model\PersonalInformation {
newRecordStoragePid = {$plugin.tx_myext.persistence.personalInformationStoragePid}
}
}
}
在我的根站点模板的“常量”下,我分别为每个站点定义了plugin.tx_myext.persistence.personalInformationStoragePid。
为PersonalInformation定义的我的TCA MM关系:
'person' => array(
'exclude' => 1,
'label' => 'LLL:EXT:myext/Resources/Private/Language/locallang_db.xlf:tx_myext_domain_model_person',
'config' => array(
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_myext_domain_model_person',
'foreign_table_where' => 'AND 1=1 ORDER BY last_name ASC',
'MM' => 'tx_myext_person_personalinformation_mm',
'size' => 10,
'autoSizeMax' => 30,
'maxitems' => 1,
'minitems' => 0,
'multiple' => 0,
),
),
为Person定义的我的TCA MM关系:
'personalinformation' => array(
'exclude' => 1,
'label' => 'LLL:EXT:myext/Resources/Private/Language/locallang_db.xlf:tx_myext_domain_model_person.personalinformation',
'config' => array(
'type' => 'none',
'readonly' => 1,
'foreign_table' => 'tx_myext_domain_model_personalinformation',
'MM_opposite_field' => 'personalinformation',
'MM' => 'tx_myext_person_personalinformation_mm',
'foreign_table_where' => 'AND tx_myext_domain_model_personalinformation.pid=###The-PID-defined-in-my-site-Const-for-personalInformationStoragePid###'
),
),
如果我在前端var_dump我的Person,则显示所有RecordStores的所有Person.PersonaInformation。但是我该只显示当前站点的PersonalInformation记录。
答案 0 :(得分:0)
模型中的字段将始终返回所有关系,而与存储pid无关。 TCA中的foreign_table_where
仅用于后端,因此对前端没有任何作用。
如果只想从某个pid获取关系,则有几种解决方案:
PersonalInformationRepository
功能的findByPerson
在控制器中分别选择PersonalInformation记录。这将遵守TypoScript中设置的storagePid
。如果您只需要1个人的信息,这将很好用。如果您需要一页上多个人使用它(例如在列表视图中),则可以在getPersonalInformation
模型中的自定义Person
函数中执行此操作。如果未缓存,则列表的速度也会变慢(取决于记录的数量)。最佳解决方案是什么,取决于您的实际情况和记录的数量。