我做了一个extbase扩展程序,想要列出我的第一个由startDate订购的约会,以及那些我希望按客户姓氏订购它们的约会。
在我的存储库中,我做了以下工作查询:
public function findAppointmentsForList($future) {
$curtime = time();
$query = $this->createQuery();
$constraints = array();
if ($future !== NULL) {
$constraints[] = ($future) ?
$query->greaterThanOrEqual('startDate', $curtime) :
$query->lessThan('startDate', $curtime);
}
if ($constraints) {
$query->matching($query->logicalAnd($constraints));
} else {}
$orderings = array(
'startDate' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING,
// 'customer.lastName' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_ASCENDING
);
$query->setOrderings($orderings);
return $query->execute();
}
它给我一些约会,所以我认为它正在工作
如果我取消注释行'customer.lastName...
,则返回0约会
发生了什么事?这只是排序,它不可能使查询更小......
我甚至没有收到任何错误 - 例如我尝试使用无效的属性并且它给了我一个错误,所以属性名称也是正确的。
我调整了工作查询和那些客户对象中的姓氏。
这是我的预约模式条目:
/**
* customer
*
* @var \vendor\extension\Domain\Model\Customer
*/
protected $customer = NULL;
这是与之对应的TCA:
'customer' => array(
'exclude' => 1,
'label' => 'LLL:EXT:extension/Resources/Private/Language/locallang_db.xlf:tx_extension_domain_model_appointment.customer',
'config' => array(
'type' => 'select',
'foreign_table' => 'fe_users',
'minitems' => 0,
'maxitems' => 1,
),
),
编辑:它现在正在工作......但不幸的是我不知道为什么,在此期间改变了太多我认为与此无关。可能会对此产生影响的一件事:startDate
属于Date
类型,我注意到查询没有对其进行过滤,因此我将curtime
更改为{{ 1}}它正确过滤。
答案 0 :(得分:1)
当您在查询中使用相关模型作为匹配或orderBy的一部分时,将使用与相关表的连接来构建查询。这意味着,结果实际上更小,并且不包括没有客户的约会。
奇怪的是你在调试它时会看到姓氏,否则我会假设你在TCA中有一些配置错误。你能提供apointment表中的TCA代码吗?可能是它的模型吗?