我正在使用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')
情况甚至更糟。列出分配给当前作业的所有类别。但还是一样:按六个类别,每个类别都列出六次。
有人可以提示我的错误所在吗?预先非常感谢。
答案 0 :(得分:0)
如果在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();