在TCA中有Typo3 foreign_table和foreign_table_where

And*_*rew 6 typo3

我正在努力解决以下问题.

我有两个数据库表,"书籍"和"类别".我通过后端列表视图中的Sysfolder从"书籍"表中获取所有数据,以进行编辑,排序和控制.

我想得到的是,该列表视图中还会有该书所属类别的名称.

在"Books"表中,有一个字段外键"category_id",用于定义Book所属的类别.我试过通过这个"category_id"来获取书籍的列表视图中的类别的名称.

当我定义TCA['books']category_id这样的:

'category_id' => array (        
            'exclude' => 0,     
            'label' => 'Cat name',      
            'config' => array (
                'type'     => 'select',
                'foreign_table' => 'category',
                'foreign_table_where' => 'AND category.id=###REC_FIELD_category_id###',
                'eval'     => 'int',
                'checkbox' => '0',
                'default' => 0
            )
        ),
Run Code Online (Sandbox Code Playgroud)

它使用category_id(在Books-table中)和uid(在Category-table中)连接Books和Categories .

不像我想的那样,它会使用category_id(在Books-table中)和id(在Category-table中)连接它们.此id是类别的id,可以与uid不同.

我做错了什么,或Typo3以某种方式自动使这种"连接"到外国表uid.?有没有办法像我想的那样得到它?

tmt*_*tmt 3

恐怕无法指定不同的外键。因此,除非有人证明我错了,否则我会使用以下解决方法。

itemsProcFunc选择类型的类型允许您完全覆盖菜单中的项目,从而创建不同的关系。

  1. 创建一个仅在后端加载的额外类,并且该类将具有将在以下位置调用的方法itemsProcFunc

    yourMethod($PA, $fobj)

  2. 使该方法加载您想要在 SELECT 框中拥有的所有类别,并$PA['items']通过完全覆盖它来设置它们,以便它是一个数组数组,其中 0 键是元素标题,1 键是您想要的类别 ID 。参见items选择。

    $PA['items'] = array(array($title, $id, ''));

  3. 将该类包含在ext_tables.php中:

    if(TYPO3_MODE == 'BE') require_once(t3lib_extMgm::extPath($_EXTKEY).'class.YOUR_CLASS.php');

  4. 设置 books 表中类别字段的配置:

    'itemsProcFunc' => 'tx_YOUR_CLASS->yourMethod',