TYPO3 8.7.10: Неизвестный столбец 'sys_file_reference.uid_local: введите' в 'where clause' в новом расширении со свойством типа файла

все!

На новом сайте TYPO3 8.7.10 я только что создал новое расширение с помощью Extension Builder. В этом расширении есть объект модели («FurnitureFamily») со свойством типа файла (я назвал его «символом»). В моем расширении также есть плагин, который отображает список всех семейств мебели. Я создал семейство мебели и новую страницу со своим плагином.

Новый объект модели в построителе расширений

Новый объект модели в построителе расширений

/**
 * name
 *
 * @var string
 * @validate NotEmpty
 */
protected $name = '';

/**
 * symbol
 *
 * @var \TYPO3\CMS\Extbase\Domain\Model\FileReference
 * @cascade remove
 */
protected $symbol = null;

Проблема в том, что вместо отображения списка с моей единственной записью я получаю следующую ошибку:

К сожалению, произошла ошибка! Код объявления: 20180219055419589a6076

С помощью расширения fh_debug я могу получить дополнительную информацию об ошибке:

К сожалению, произошла ошибка! Код: 20180219055419589a6076 Неизвестный столбец 'sys_file_reference.uid_local: введите' in 'where clause, код исключения: 1472074485 файл: /typo3/sysext/extbase/Classes/Persistence/Generic/Storage/Typo3DbBackend.php line: fps typo3 / sysext / extbase / Classes / Persistence / Generic / Backend.php "строка: 226 функция: файл getObjectDataByQuery: /typo3/sysext/extbase/Classes/Persistence/Generic/PersistenceManager.php" строка: 126 функция: файл getObjecteryData / typo3 / sysext / extbase / Classes / Persistence / Generic / QueryResult.php "строка: 113 функция: файл getObjectDataByQuery: /typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php" строка: 567 функция: getFile : /typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php "строка: 503 функция: файл mapResultToPropertyValue: /typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper. функция: mapObjectToClassProperty файл: /typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php "l ine: 186 функция: файл thawProperties: /typo3/sysext/extbase/Classes/Persistence/Generic/Mapper/DataMapper.php "строка: 144 функция: mapSingleRow

Любопытно, что когда я удаляю свойство «символ», отображается список (только со свойством «имя»).

Будучи новой установкой, я попытался сравнить свою базу данных со спецификацией, но изменений не было.

У меня вопрос: как исправить эту ошибку?

Спасибо.


person Giovanni Romero Pérez    schedule 19.02.2018    source источник
comment
Обычно он должен писать имя с заглавной буквы в разделе комментариев, например * Name, * Symbol .... и, на мой взгляд, вам не нужно удалять @cascade. Не могли бы вы изменить эти две вещи и сказать, какой будет результат?   -  person Marcel Wasilewski    schedule 20.02.2018


Ответы (1)


Вопрос довольно старый, но у меня все еще была эта проблема в TYPO3 версии 9, и я обнаружил, что она связана с extension-builder, который создает некоторые записи для поля uid_local:type.
Сообщение об ошибке просто блокирует все, потому что поле тип не определен.

На этом снимке экрана вы можете видеть, что поле с таким именем определено в таблице sys_file_reference: введите описание изображения здесь

Прокручивая длинный список с полями таблицы вниз, можно обнаружить что-то вроде этого:  введите описание изображения здесь

Там можно найти определение для config.items, в котором есть типичные определения для некоторых элементов, которые можно выбрать. Даже элемент всего один, структура типична для какой-то формы-элемента для выбора. Я могу представить себе такие элементы формы, как выпадающее меню выбора, переключатели или флажки. Все эти элементы имеют такую ​​структуру кода как определение.

Итак, что я сделал для удаления сообщения об ошибке, так это просто определил «тип» для поля:

$tmp_ttnews_vp_columns['uid_local:type']['config']['type'] = 'select';

С другой стороны, поле обычно не отображается, поскольку таблица sys_file_reference никогда не следует логике extbase и работает иначе. Так что довольно легко и полезно удалить некоторый код в файле
your_extension/Configuration/TCA/Overrides/sys_file_reference.php
В этой таблице есть блок с определениями для новых или измененных полей, и большую часть кода выше или ниже этого списка можно удалить.

Он находится над определениями столбцов и может быть удален:  введите описание изображения здесь

И такой блок, как этот ниже, также можно удалить с желаемым кодом:  введите описание изображения здесь

Документацию о поле type можно найти здесь, в главе внизу также объясняется комбинированная нотация, но не с uid_local, а с file: file:type.

Есть много ситуаций и подробностей, почему это не сработало, вот известные случаи, я могу расширить список на основе комментариев позже:

  • Отображение по умолчанию, созданное расширением-построителем, выглядит примерно так:

config.tx_extbase {
persistence {
 classes {

   WDB\TtnewsVp\Domain\Model\FileReference {
     mapping {
       tableName = sys_file_reference
       recordType = Tx_TtnewsVp_FileReference
     }
   }

 }
}
}

здесь строка recordType = Tx_TtnewsVp_FileReference вызывает беспокойство и вызывает сообщение об ошибке, как описано в вопросе.
Этот тип TypoScript обычно находится в файле ext_typoscript_setup.typoscript в корне папки расширения, поэтому он всегда загружается, даже если статический шаблон не входит.

  • Аннотации в классах могут быть неправильными, включая простые ошибки, такие как опечатки. Аннотации и подсказки типов должны быть правильными (возможно, отсутствующий вариант лучше, чем неправильный, но я никогда не пробовал использовать отсутствующие аннотации или подсказки типа).
person David    schedule 04.03.2020