Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Model view controller 具有MM关系的TYPO3 Extbase存储库约束_Model View Controller_Typo3_Extbase_Typo3 7.6.x - Fatal编程技术网

Model view controller 具有MM关系的TYPO3 Extbase存储库约束

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

我构建了一个扩展,其中包含一个表,可以是项目,也可以是对象,项目是多个对象的容器

为了区分,复选框用于将项目标记为项目,勾选此复选框时,将显示可选字段。 此字段是从项目到其包含的对象(同一表)的关系(m:n)。“多个并排选择”仅显示未通过
外部\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();