Model view controller 具有MM关系的TYPO3 Extbase存储库约束
我构建了一个扩展,其中包含一个表,可以是项目,也可以是对象,项目是多个对象的容器 为了区分,复选框用于将项目标记为项目,勾选此复选框时,将显示可选字段。 此字段是从项目到其包含的对象(同一表)的关系(m:n)。“多个并排选择”仅显示未通过Model view controller 具有MM关系的TYPO3 Extbase存储库约束,model-view-controller,typo3,extbase,typo3-7.6.x,Model View Controller,Typo3,Extbase,Typo3 7.6.x,我构建了一个扩展,其中包含一个表,可以是项目,也可以是对象,项目是多个对象的容器 为了区分,复选框用于将项目标记为项目,勾选此复选框时,将显示可选字段。 此字段是从项目到其包含的对象(同一表)的关系(m:n)。“多个并排选择”仅显示未通过外部\u table\u(其中)分配给项目的非项目和对象 该字段具有以下TCA: 'objects' => [ 'displayCond' => 'FIELD:isproject:=:1', 'exclude' => 0, 'lab
外部\u table\u(其中
)分配给项目的非项目和对象
该字段具有以下TCA:
'objects' => [
'displayCond' => 'FIELD:isproject:=:1',
'exclude' => 0,
'label' => $ll . 'tx_myext_domain_model_item.objects',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'foreign_table' => 'tx_myext_domain_model_item',
'foreign_table_where' => 'AND isproject = 0 AND tx_myext_domain_model_item.uid NOT IN (SELECT uid_foreign FROM tx_myext_item_object_mm WHERE uid_local != ###THIS_UID###)',
'MM' => 'tx_myext_item_object_mm',
'size' => 10,
'autoSizeMax' => 30,
'maxitems' => 9999,
'multiple' => 0
],
],
在我的插件中,我提供了一个选项(通过flexform)来选择只显示对象,只显示项目,或同时显示两者,在存储库中使用以下代码完成:
public function findList($entryInclude = 'objects_only') {
/** @var \TYPO3\CMS\Extbase\Persistence\Generic\Query $query */
$query = $this->createQuery();
switch ($entryInclude) {
case 'projects_objects':
$foreign_uids = $this->createQuery()
->statement('SELECT uid_foreign FROM tx_myext_item_object_mm')
->execute();
$constraints = [
$query->equals('isproject', 1),
$query->logicalNot($query->in('uid', $foreign_uids))
];
break;
case 'projects_only':
$constraints = $query->equals('isproject', 1);
break;
default:
$constraints = $query->equals('isproject', 0);
break;
}
$query->matching($query->logicalAnd($constraints));
return $query->execute();
}
构建
tx\u myext\u item\u object\u mm
表中的所有uid\u foreign
数组会导致错误…在我看来,这是一个自定义查询的情况。以下内容应为您提供mm表格中未引用的对象:
$query = $this->createQuery();
$query->statement('
SELECT *
FROM tx_myext_domain_model_item
WHERE uid NOT IN(
SELECT foreign_uid FROM tx_myext_item_object_mm
)
');
$query->execute();