【问题标题】:TYPO3 Extbase repository constraint with MM relationTYPO3 Extbase 存储库约束与 MM 关系
【发布时间】:2016-12-26 09:16:15
【问题描述】:

我构建了一个带有项目表的扩展,这些项目可以是项目或对象,一个项目是多个对象的容器。

要区分,复选框用于将项目标记为项目,并且当勾选此复选框时,将显示一个可选字段。 此字段是从项目到它包含的对象(同一个表)的关系 (m:n)。多个并排选择仅显示非项目和尚未通过foreign_table_where 分配给项目的对象。

此字段具有以下 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_myext_item_object_mm 表中所有uid_foreign 的数组的努力导致错误...

【问题讨论】:

    标签: model-view-controller typo3 extbase typo3-7.6.x


    【解决方案1】:

    在我看来,这是自定义查询的一个案例。以下内容应为您提供 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();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-18
      相关资源
      最近更新 更多