У меня та же проблема, что была здесь:
Ошибка Typo3: отсутствует карта ColumnMap для свойства
... за исключением того, что я использую реляционную таблицу m: n. К сожалению, моя ошибка продолжается:
Я использую Typo3 версии 8.7.19 и разрабатываю расширение. Две таблицы «mitarbeiter» и «zusatzlich» связаны отношением m: n. Я пытаюсь найти поле в таблице «zusatzlich» в хранилище «mitarbeiter». Связь обоих необходима.
Если я попытаюсь выполнить следующий запрос, я получаю сообщение об ошибке «ColumnMap для свойства« tx_khsjmitarbeiter_domain_model_zusatzlich »класса« ... \ Mitarbeiter »отсутствует».
$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();
Соответствующий код TCA поля «connection_id» в «mitarbeiter», который содержит UID «zusatzlich»:
'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 void * / public function 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;
}
Я могу добавлять и применять новые элементы zusatz в BE к любому элементу mitarbeiter, поэтому я уверен, что он настроен правильно в этом отношении. Однако я также заметил, что если я изменю эту строку:
$zu[] = $query->equals('tx_khsjmitarbeiter_domain_model_zusatzlich.zusatz', $zusatz1);
...к этому...
$zu[] = $query->equals('ANYTHINGATALL.zusatz', $zusatz1);
Я получаю ту же ошибку, ссылаясь на ANYTHINGATALL вместо tx_khsjmitarbeiter_domain_model_zusatzlich
Может ли кто-нибудь указать мне правильное направление?