Typo3 Error: The ColumnMap for property is missing (m:n)
Typo3 Error: The ColumnMap for property is missing (m:n)
我遇到了与此处发布的相同问题:
...除了我使用的是 m:n 关系 table。不幸的是我的错误继续存在:
我使用的是 Typo3 8.7.19 版,我正在开发一个扩展。两个 tables "mitarbeiter" 和 "zusatzlich" 是具有 m:n 关系的连接体。我尝试在 "mitarbeiter" 的存储库中搜索 table "zusatzlich" 中的字段。两者的关系是必要的。
如果我尝试执行以下查询,我会收到错误 "The ColumnMap for property "tx_khsjmitarbeiter_domain_model_zusatzlich" of class "...\Mitarbeiter" is missing."
$query = $this->createQuery();
$zu = [];
if($zusatz1 != ""){
$zu[] = $query->equals('tx_khsjmitarbeiter_domain_model_zusatzlich.zusatz', $zusatz1);
}
if(count($zu)>0){
$query->matching($query->logicalAnd( $zu ));
}
return $query->execute();
包含"zusatzlich"的UID的"mitarbeiter"字段"connection_id"的相关TCA代码:
'connection_id' => [
'exclude' => true,
'label' => 'LLL:EXT:khsj_mitarbeiter/Resources/Private/Language/locallang_db.xlf:tx_khsjmitarbeiter_domain_model_mitarbeiter.connection_id',
'config' => [
'type' => 'select',
'renderType' => 'selectCheckBox',
'foreign_table' => 'tx_khsjmitarbeiter_domain_model_zusatzlich',
'MM' => 'tx_khsjmitarbeiter_mitarbeiter_zusatzlich_mm',
],
],
这是对象模型:
/**
* connectionId
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\..\Model\Zusatzlich>
* @cascade remove
*/
protected $connectionId = null;
/**
* Initializes all ObjectStorage properties
* Do not modify this method!
* It will be rewritten on each save in the extension builder
* You may modify the constructor of this class instead
*
* @return void
*/
protected function initStorageObjects()
{
$this->connectionId = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}
/**
* 添加 Zusatzlich
*
* @param ..\Model\Zusatzlich $connectionId
* @return无效
*/
public 函数 addConnectionId(..\Model\Zusatzlich $connectionId)
{
$this->connectionId->attach($connectionId);
}
/**
* Removes a Zusatzlich
*
* @param \..\Model\Zusatzlich $connectionIdToRemove The Zusatzlich to be removed
* @return void
*/
public function removeConnectionId(\..\Model\Zusatzlich $connectionIdToRemove)
{
$this->connectionId->detach($connectionIdToRemove);
}
/**
* Returns the connectionId
*
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\..\Model\Zusatzlich> connectionId
*/
public function getConnectionId()
{
return $this->connectionId;
}
/**
* Sets the connectionId
*
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\..\Model\Zusatzlich> $connectionId
* @return void
*/
public function setConnectionId(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $connectionId)
{
$this->connectionId = $connectionId;
}
我可以在 BE 中添加新的 zusatz 项目并将其应用于任何 mitarbeiter 项目,因此我相信它在这方面的设置是正确的。
但是我也注意到,如果我更改此行:
$zu[] = $query->equals('tx_khsjmitarbeiter_domain_model_zusatzlich.zusatz', $zusatz1);
...到此...
$zu[] = $query->equals('ANYTHINGATALL.zusatz', $zusatz1);
我在引用 ANYTHINGATALL 而不是 tx_khsjmitarbeiter_domain_model_zusatzlich
时遇到同样的错误
谁能指出我正确的方向?
您需要提供在 TCA 中描述为约束运算符的 属性,而不是 table 列。据我所知,您的查询约束应该是:
if($zusatz1 != ""){
$zu[] = $query->contains('connection_id', $zusatz1);
}
引导我走向正确的方向,但缺少相关模型“zusatzlich”的 属性。因此它应该是:
if ($zusatz1 != "") {
$zu[] = $query->contains('connection_id.zusatz', $zusatz1);
}
如果您的关系在 TCA 中正确定义,它将被转换为具有正确 table 名称的 SQL LeftJoin。
如果 属性 带有下划线(例如 zusatz_xy),小驼峰式版本也可以使用 (zusatzXy)。
我遇到了与此处发布的相同问题:
...除了我使用的是 m:n 关系 table。不幸的是我的错误继续存在:
我使用的是 Typo3 8.7.19 版,我正在开发一个扩展。两个 tables "mitarbeiter" 和 "zusatzlich" 是具有 m:n 关系的连接体。我尝试在 "mitarbeiter" 的存储库中搜索 table "zusatzlich" 中的字段。两者的关系是必要的。
如果我尝试执行以下查询,我会收到错误 "The ColumnMap for property "tx_khsjmitarbeiter_domain_model_zusatzlich" of class "...\Mitarbeiter" is missing."
$query = $this->createQuery();
$zu = [];
if($zusatz1 != ""){
$zu[] = $query->equals('tx_khsjmitarbeiter_domain_model_zusatzlich.zusatz', $zusatz1);
}
if(count($zu)>0){
$query->matching($query->logicalAnd( $zu ));
}
return $query->execute();
包含"zusatzlich"的UID的"mitarbeiter"字段"connection_id"的相关TCA代码:
'connection_id' => [
'exclude' => true,
'label' => 'LLL:EXT:khsj_mitarbeiter/Resources/Private/Language/locallang_db.xlf:tx_khsjmitarbeiter_domain_model_mitarbeiter.connection_id',
'config' => [
'type' => 'select',
'renderType' => 'selectCheckBox',
'foreign_table' => 'tx_khsjmitarbeiter_domain_model_zusatzlich',
'MM' => 'tx_khsjmitarbeiter_mitarbeiter_zusatzlich_mm',
],
],
这是对象模型:
/**
* connectionId
*
* @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\..\Model\Zusatzlich>
* @cascade remove
*/
protected $connectionId = null;
/**
* Initializes all ObjectStorage properties
* Do not modify this method!
* It will be rewritten on each save in the extension builder
* You may modify the constructor of this class instead
*
* @return void
*/
protected function initStorageObjects()
{
$this->connectionId = new \TYPO3\CMS\Extbase\Persistence\ObjectStorage();
}
/** * 添加 Zusatzlich * * @param ..\Model\Zusatzlich $connectionId * @return无效 */ public 函数 addConnectionId(..\Model\Zusatzlich $connectionId) { $this->connectionId->attach($connectionId); }
/**
* Removes a Zusatzlich
*
* @param \..\Model\Zusatzlich $connectionIdToRemove The Zusatzlich to be removed
* @return void
*/
public function removeConnectionId(\..\Model\Zusatzlich $connectionIdToRemove)
{
$this->connectionId->detach($connectionIdToRemove);
}
/**
* Returns the connectionId
*
* @return \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\..\Model\Zusatzlich> connectionId
*/
public function getConnectionId()
{
return $this->connectionId;
}
/**
* Sets the connectionId
*
* @param \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\..\Model\Zusatzlich> $connectionId
* @return void
*/
public function setConnectionId(\TYPO3\CMS\Extbase\Persistence\ObjectStorage $connectionId)
{
$this->connectionId = $connectionId;
}
我可以在 BE 中添加新的 zusatz 项目并将其应用于任何 mitarbeiter 项目,因此我相信它在这方面的设置是正确的。 但是我也注意到,如果我更改此行:
$zu[] = $query->equals('tx_khsjmitarbeiter_domain_model_zusatzlich.zusatz', $zusatz1);
...到此...
$zu[] = $query->equals('ANYTHINGATALL.zusatz', $zusatz1);
我在引用 ANYTHINGATALL 而不是 tx_khsjmitarbeiter_domain_model_zusatzlich
时遇到同样的错误谁能指出我正确的方向?
您需要提供在 TCA 中描述为约束运算符的 属性,而不是 table 列。据我所知,您的查询约束应该是:
if($zusatz1 != ""){
$zu[] = $query->contains('connection_id', $zusatz1);
}
if ($zusatz1 != "") {
$zu[] = $query->contains('connection_id.zusatz', $zusatz1);
}
如果您的关系在 TCA 中正确定义,它将被转换为具有正确 table 名称的 SQL LeftJoin。
如果 属性 带有下划线(例如 zusatz_xy),小驼峰式版本也可以使用 (zusatzXy)。