首页 > 解决方案 > 更正输出包含分配类别的作业列表的问题

问题描述

我正在使用 TYPO3 8.7 我想输出当前工作机会的列表,包括我扩展中的相应类别。

这是我的代码:

/**
 * Return all active jobs and join category title to each job
 *
 * @return QueryResult
 * @return array
 */
public function findAll()
{
/** @var QueryBuilder $queryBuilder */
    $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_ats_domain_model_job');
    $statement = $queryBuilder
      ->select('tx_ats_domain_model_job.uid', 'tx_ats_domain_model_job.title', 'tx_ats_domain_model_job.job_number')
      ->from('tx_ats_domain_model_job')
      ->addSelect('tx_ats_domain_model_category.title')
      ->from('tx_ats_domain_model_category')
      ->join(
            'tx_ats_domain_model_job',
            'tx_ats_domain_model_category',
            'categories',
            $queryBuilder->expr()->eq('categories.uid', $queryBuilder->quoteIdentifier('tx_ats_domain_model_job.cat'))
      )->execute();
      $results = $statement->fetch();
      return $results;
}

当我执行以下操作时:

->select('tx_ats_domain_model_job.uid')
->from('tx_ats_domain_model_job')

列出了所有实际工作 - 但没有内容。

当我执行以下操作时:

->select('tx_ats_domain_model_job.uid', 'tx_ats_domain_model_job.title', 'tx_ats_domain_model_job.job_number')
->from('tx_ats_domain_model_job')

所有实际工作都按工作名称列出(没有工作编号)——但每个工作三遍,每个选择语句一次。

当我执行以下操作时:

->select('tx_ats_domain_model_job.uid', 'tx_ats_domain_model_job.title', 'tx_ats_domain_model_job.job_number')
->from('tx_ats_domain_model_job')
->addSelect('tx_ats_domain_model_category.title')
->from('tx_ats_domain_model_category')

它的情况更糟。列出了分配给当前作业的所有类别。但同样如此:六个类别都被列出六次。

有人可以提示我的错误在哪里吗?提前谢谢了。

标签: typo3extbase

解决方案


如果在 tx_ats_domain_model_job.cat 中仅代表来自 tx_ats_domain_model_category 的 uid,那么它必须是

$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('tx_ats_domain_model_job');
    $statement = $queryBuilder
        ->select('tx_ats_domain_model_job.uid', 'tx_ats_domain_model_job.title', 'tx_ats_domain_model_job.job_number', 'tx_ats_domain_model_category.title')
        ->from('tx_ats_domain_model_job')
        ->leftJoin(
            'tx_ats_domain_model_job',
            'tx_ats_domain_model_category',
            'categories',
            $queryBuilder->expr()->eq('categories.uid', $queryBuilder->quoteIdentifier('tx_ats_domain_model_job.cat'))
        )->execute();
    $results = $statement->fetch();

推荐阅读