If you add custom fields to an asset, and use those fields as columns in a view, the query crashes. While normal fields such as date works, using dropdowns causes the Twig template to expect tables which are not there.
The tables queried are glpi_customdropdowns_*, but even as I have multiple of these custom dropdown fields, not a single table of that scheme does exist in my MySQL database.
Server
Operating system: Linux itsm-glpi 6.17.10-ams-hardened #3 SMP PREEMPT_DYNAMIC Fri Dec 5 09:37:37 CET 2025 x86_64
PHP: 8.4.16 fpm-fcgi
PHP extensions: Core, date, libxml, openssl, pcre, zlib, filter, hash, json, random, Reflection, SPL, session, standard, sodium,
cgi-fcgi, mysqlnd, PDO, xml, bcmath, bz2, calendar, ctype, curl, dom, mbstring, FFI, fileinfo, ftp, gd, gettext, iconv,
igbinary, intl, ldap, exif, mysqli, pdo_mysql, Phar, posix, readline, shmop, SimpleXML, sockets, sysvmsg, sysvsem, sysvshm,
tokenizer, xmlreader, xmlwriter, xsl, zip, redis, Zend OPcache
Setup: disable_functions="" max_execution_time="30" max_input_vars="1000" memory_limit="128M" post_max_size="8M"
session.cookie_secure="1" session.cookie_httponly="1" session.cookie_samesite="" session.save_handler="files"
upload_max_filesize="2M"
Web server: nginx/1.26.3 ()
User agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:140.0) Gecko/20100101 Firefox/140.0
Database:
Server Software: -- Please help get to 10k stars at https://github.com/MariaDB/Server
Server Version: 11.8.3-MariaDB-0+deb13u1 from Debian
Server SQL Mode: STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
Parameters: glpi@localhost/glpi
Host info: Localhost via UNIX socket
Requirements:
PHP version (8.4.16) is supported.
OS and PHP are relying on 64 bits integers.
Sessions configuration is OK.
Allocated memory is sufficient.
Following extensions are installed: dom, fileinfo, filter, libxml, simplexml, tokenizer, xmlreader,
xmlwriter.
mysqli extension is installed
curl extension is installed
gd extension is installed
intl extension is installed
mbstring extension is installed
zlib extension is installed
bcmath extension is installed
The constant
SODIUM_CRYPTO_AEAD_XCHACHA20POLY1305_IETF_NPUBBYTES is present.
openssl extension is installed
Database engine version (11.8.3) is supported.
The log file has been created successfully.
Write access to /var/www/files/_cache has been validated.
Write access to /var/www/files/_cron has been validated.
Write access to /var/www/files has been validated.
Write access to /var/www/files/_graphs has been validated.
Write access to /var/www/files/_lock has been validated.
Write access to /var/www/files/_pictures has been validated.
Write access to /var/www/files/_plugins has been validated.
Write access to /var/www/files/_rss has been validated.
Write access to /var/www/files/_sessions has been validated.
Write access to /var/www/files/_tmp has been validated.
Write access to /var/www/files/_uploads has been validated.
Sessions configuration is secured.
exif extension is installed
ldap extension is installed
Following extensions are installed: bz2,
Phar, zip.
Zend OPcache extension is installed
Following extensions are installed:
ctype, iconv, sodium.
Write access to /var/www/marketplace
has been validated.
Timezones seems loaded in database.
GLPI constants
GLPI_ROOT: "/var/www"
GLPI_VERSION: "11.0.4"
GLPI_SCHEMA_VERSION: "11.0.4@9065df1ff6b8ff1d77b519d1c4856507d18258b0"
GLPI_FILES_VERSION: "11.0.4-1d4fbe9a"
GLPI_MIN_PHP: "8.2"
GLPI_MAX_PHP: "8.5"
GLPI_YEAR: "2025"
GLPI_I18N_DIR: "/var/www/locales"
GLPI_CSRF_EXPIRES: 14400
GLPI_ENVIRONMENT_TYPE: "production"
GLPI_CONFIG_DIR: "/var/www/config"
GLPI_VAR_DIR: "/var/www/files"
GLPI_MARKETPLACE_DIR: "/var/www/marketplace"
GLPI_ALLOW_IFRAME_IN_RICH_TEXT: false
GLPI_SERVERSIDE_URL_ALLOWLIST: ["^\n (http|https|feed)://
# protocol\n (\n (?:\n
(?:xn--[a-z0-9-]++\.)*+xn--[a-z0-9-]++ # a domain name using punycode\n
|\n (?:[\pL\pN\pS\pM\-\]++\.)+[\pL\pN\pM]++ # a multi-level domain
name\n |\n [a-z0-9\-\]++
# a single-level domain name\n )\.?\n |
# or\n \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
# an IP address\n | #
or\n \[\n
(?:(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){6})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:::(?:(?:(?:[0-9a-f]{1,4})):){5})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){4})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,1}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){3})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,2}(?:(?:[0-9a-f]{1,4})))?::(?:(?:(?:[0-9a-f]{1,4})):){2})(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,3}(?:(?:[0-9a-f]{1,4})))?::(?:(?:[0-9a-f]{1,4})):)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,4}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:(?:(?:(?:[0-9a-f]{1,4})):(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9]))\.){3}(?:(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])))))))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,5}(?:(?:[0-9a-f]{1,4})))?::)(?:(?:[0-9a-f]{1,4})))|(?:(?:(?:(?:(?:(?:[0-9a-f]{1,4})):){0,6}(?:(?:[0-9a-f]{1,4})))?::))))\n
\] # an IPv6 address\n
)\n (?:/ (?:[\pL\pN\pS\pM\-._\!$&'()+,;=:@]|%[0-9A-Fa-f]{2}) )* # a path\n
(?:\? (?:[\pL\pN\-._\~!$&'\\+,;=:@/?]|%[0-9A-Fa-f]{2}) )? # a query (optional)\n
$~ixuD"]
GLPI_DISALLOWED_UPLOADS_PATTERN: "/\.(php\d*|phar)$/i"
GLPI_TELEMETRY_URI: "https://telemetry.glpi-project.org"
GLPI_INSTALL_MODE: "TARBALL"
GLPI_NETWORK_MAIL: "glpi@teclib.com"
GLPI_NETWORK_SERVICES: "https://services.glpi-network.com"
GLPI_MARKETPLACE_ENABLE: 3
GLPI_MARKETPLACE_PRERELEASES: false
GLPI_MARKETPLACE_ALLOW_OVERRIDE: true
GLPI_MARKETPLACE_MANUAL_DOWNLOADS: true
GLPI_USER_AGENT_EXTRA_COMMENTS: ""
GLPI_DOCUMENTATION_ROOT_URL: "https://links.glpi-project.org"
GLPI_DISABLE_ONLY_FULL_GROUP_BY_SQL_MODE: "1"
GLPI_LOG_LVL: "warning"
GLPI_SKIP_UPDATES: false
GLPI_STRICT_ENV: false
GLPI_AJAX_DASHBOARD: "1"
GLPI_CALDAV_IMPORT_STATE: 0
GLPI_CENTRAL_WARNINGS: "1"
GLPI_SYSTEM_CRON: false
GLPI_TEXT_MAXSIZE: "4000"
GLPI_WEBHOOK_ALLOW_RESPONSE_SAVING: "0"
GLPI_WEBHOOK_CRA_MANDATORY: false
GLPI_ALTCHA_MODE: "interactive"
GLPI_ALTCHA_MAX_NUMBER: 50000
GLPI_ALTCHA_EXPIRATION_INTERVAL: "PT20M"
GLPI_DOC_DIR: "/var/www/files"
GLPI_CACHE_DIR: "/var/www/files/_cache"
GLPI_CRON_DIR: "/var/www/files/_cron"
GLPI_GRAPH_DIR: "/var/www/files/_graphs"
GLPI_LOCAL_I18N_DIR: "/var/www/files/_locales"
GLPI_LOCK_DIR: "/var/www/files/_lock"
GLPI_LOG_DIR: "/var/www/files/_log"
GLPI_PICTURE_DIR: "/var/www/files/_pictures"
GLPI_PLUGIN_DOC_DIR: "/var/www/files/_plugins"
GLPI_RSS_DIR: "/var/www/files/_rss"
GLPI_SESSION_DIR: "/var/www/files/_sessions"
GLPI_TMP_DIR: "/var/www/files/_tmp"
GLPI_UPLOAD_DIR: "/var/www/files/_uploads"
GLPI_INVENTORY_DIR: "/var/www/files/_inventories"
GLPI_THEMES_DIR: "/var/www/files/_themes"
GLPI_PLUGINS_DIRECTORIES: ["/var/www/marketplace","/var/www/plugins"]
GLPI_NETWORK_API_URL: "https://services.glpi-network.com/api"
GLPI_NETWORK_REGISTRATION_API_URL: "https://services.glpi-network.com/api/registration/"
GLPI_MARKETPLACE_PLUGINS_API_URI: "https://services.glpi-network.com/api/marketplace/"
Code of Conduct
Is there an existing issue for this?
GLPI Version
11.0.4
Plugin version
1.23.2
Bug description
If you add custom fields to an asset, and use those fields as columns in a view, the query crashes. While normal fields such as date works, using dropdowns causes the Twig template to expect tables which are not there.
The tables queried are glpi_customdropdowns_*, but even as I have multiple of these custom dropdown fields, not a single table of that scheme does exist in my MySQL database.
Relevant log output
An exception has been thrown during the rendering of a template ("MySQL query error: Table 'glpi.glpi_customdropdowns_softwaretypdropdowns' doesn't exist (1146) in SQL query "SELECT `glpi_softwarecategories`.`id`, `glpi_softwarecategories`.`name`, `glpi_softwarecategories`.`softwarecategories_id`, (SELECT COUNT(DISTINCT(`glpi_softwares`.`id`)) AS `cpt` FROM `glpi_softwares` WHERE `glpi_softwares`.`softwarecategories_id` = `glpi_softwarecategories`.`id` AND glpi_softwares.id IN ( SELECT * FROM (SELECT DISTINCT glpi_softwares.id FROM `glpi_softwares` LEFT JOIN `glpi_manufacturers` ON (`glpi_softwares`.`manufacturers_id` = `glpi_manufacturers`.`id`) LEFT JOIN `glpi_users` AS `glpi_users_users_id_tech` ON (`glpi_softwares`.`users_id_tech` = `glpi_users_users_id_tech`.`id`) LEFT JOIN `glpi_softwareversions` ON (`glpi_softwares`.`id` = `glpi_softwareversions`.`softwares_id`) LEFT JOIN `glpi_items_softwareversions` AS `glpi_items_softwareversions_7f4d0c28c21bc26859444ee001ac5587` ON (`glpi_softwareversions`.`id` = `glpi_items_softwareversions_7f4d0c28c21bc26859444ee001ac5587`.`softwareversions_id` AND `glpi_items_softwareversions_7f4d0c28c21bc26859444ee001ac5587`.`is_deleted_item` = '0' AND `glpi_items_softwareversions_7f4d0c28c21bc26859444ee001ac5587`.`is_deleted` = '0' AND `glpi_items_softwareversions_7f4d0c28c21bc26859444ee001ac5587`.`is_template_item` = '0' AND (true)) LEFT JOIN `glpi_softwarelicenses` AS `glpi_softwarelicenses_1edbfb5e4ffa56390807f48033c01147` ON (`glpi_softwares`.`id` = `glpi_softwarelicenses_1edbfb5e4ffa56390807f48033c01147`.`softwares_id` AND (true) AND `glpi_softwarelicenses_1edbfb5e4ffa56390807f48033c01147`.`is_template` = '0' AND ((`glpi_softwarelicenses_1edbfb5e4ffa56390807f48033c01147`.`expire` IS NULL) OR (`glpi_softwarelicenses_1edbfb5e4ffa56390807f48033c01147`.`expire` > NOW()))) LEFT JOIN `glpi_plugin_fields_softwarefreigabes` AS `glpi_plugin_fields_softwarefreigabes_nchsteprfungfield` ON (`glpi_softwares`.`id` = `glpi_plugin_fields_softwarefreigabes_nchsteprfungfield`.`items_id` AND `glpi_plugin_fields_softwarefreigabes_nchsteprfungfield`.`itemtype` = 'Software') LEFT JOIN `glpi_plugin_fields_softwareberdiesoftwares` ON (`glpi_softwares`.`id` = `glpi_plugin_fields_softwareberdiesoftwares`.`items_id` AND `glpi_plugin_fields_softwareberdiesoftwares`.`itemtype` = 'Software') LEFT JOIN `glpi_customdropdowns_softwaretypdropdowns` AS `glpi_customdropdowns_softwaretypdropdowns_dropdowns_dropdowns_id_softwaretypfield_5a6f5b8b22d7b77565dfdee676f2bbde` ON (`glpi_plugin_fields_softwareberdiesoftwares`.`dropdowns_dropdowns_id_softwaretypfield` = `glpi_customdropdowns_softwaretypdropdowns_dropdowns_dropdowns_id_softwaretypfield_5a6f5b8b22d7b77565dfdee676f2bbde`.`id`) WHERE ((1)) AND `glpi_softwares`.`is_deleted` = 0 AND `glpi_softwares`.`is_template` = 0 ) AS id_criteria )) AS `items_count` FROM `glpi_softwarecategories` ORDER BY `glpi_softwarecategories`.`level` DESC, `glpi_softwarecategories`.`name`".") in "pages/generic_list.html.twig" at line 37. In ./templates/pages/generic_list.html.twig(37) #0 ./vendor/twig/twig/src/Template.php(358): Twig\Template->yield() #1 ./vendor/twig/twig/src/Template.php(373): Twig\Template->display() #2 ./vendor/twig/twig/src/TemplateWrapper.php(51): Twig\Template->render() #3 ./src/Glpi/Application/View/TemplateRenderer.php(170): Twig\TemplateWrapper->render() #4 ./src/Glpi/Controller/AbstractController.php(68): Glpi\Application\View\TemplateRenderer->render() #5 ./src/Glpi/Controller/GenericListController.php(51): Glpi\Controller\AbstractController->render() #6 ./vendor/symfony/http-kernel/HttpKernel.php(181): Glpi\Controller\GenericListController->__invoke() #7 ./vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw() #8 ./vendor/symfony/http-kernel/Kernel.php(197): Symfony\Component\HttpKernel\HttpKernel->handle() #9 ./public/index.php(70): Symfony\Component\HttpKernel\Kernel->handle() #10 {main} Previous: MySQL query error: Table 'glpi.glpi_customdropdowns_softwaretypdropdowns' doesn't exist (1146) in SQL query "SELECT `glpi_softwarecategories`.`id`, `glpi_softwarecategories`.`name`, `glpi_softwarecategories`.`softwarecategories_id`, (SELECT COUNT(DISTINCT(`glpi_softwares`.`id`)) AS `cpt` FROM `glpi_softwares` WHERE `glpi_softwares`.`softwarecategories_id` = `glpi_softwarecategories`.`id` AND glpi_softwares.id IN ( SELECT * FROM (SELECT DISTINCT glpi_softwares.id FROM `glpi_softwares` LEFT JOIN `glpi_manufacturers` ON (`glpi_softwares`.`manufacturers_id` = `glpi_manufacturers`.`id`) LEFT JOIN `glpi_users` AS `glpi_users_users_id_tech` ON (`glpi_softwares`.`users_id_tech` = `glpi_users_users_id_tech`.`id`) LEFT JOIN `glpi_softwareversions` ON (`glpi_softwares`.`id` = `glpi_softwareversions`.`softwares_id`) LEFT JOIN `glpi_items_softwareversions` AS `glpi_items_softwareversions_7f4d0c28c21bc26859444ee001ac5587` ON (`glpi_softwareversions`.`id` = `glpi_items_softwareversions_7f4d0c28c21bc26859444ee001ac5587`.`softwareversions_id` AND `glpi_items_softwareversions_7f4d0c28c21bc26859444ee001ac5587`.`is_deleted_item` = '0' AND `glpi_items_softwareversions_7f4d0c28c21bc26859444ee001ac5587`.`is_deleted` = '0' AND `glpi_items_softwareversions_7f4d0c28c21bc26859444ee001ac5587`.`is_template_item` = '0' AND (true)) LEFT JOIN `glpi_softwarelicenses` AS `glpi_softwarelicenses_1edbfb5e4ffa56390807f48033c01147` ON (`glpi_softwares`.`id` = `glpi_softwarelicenses_1edbfb5e4ffa56390807f48033c01147`.`softwares_id` AND (true) AND `glpi_softwarelicenses_1edbfb5e4ffa56390807f48033c01147`.`is_template` = '0' AND ((`glpi_softwarelicenses_1edbfb5e4ffa56390807f48033c01147`.`expire` IS NULL) OR (`glpi_softwarelicenses_1edbfb5e4ffa56390807f48033c01147`.`expire` > NOW()))) LEFT JOIN `glpi_plugin_fields_softwarefreigabes` AS `glpi_plugin_fields_softwarefreigabes_nchsteprfungfield` ON (`glpi_softwares`.`id` = `glpi_plugin_fields_softwarefreigabes_nchsteprfungfield`.`items_id` AND `glpi_plugin_fields_softwarefreigabes_nchsteprfungfield`.`itemtype` = 'Software') LEFT JOIN `glpi_plugin_fields_softwareberdiesoftwares` ON (`glpi_softwares`.`id` = `glpi_plugin_fields_softwareberdiesoftwares`.`items_id` AND `glpi_plugin_fields_softwareberdiesoftwares`.`itemtype` = 'Software') LEFT JOIN `glpi_customdropdowns_softwaretypdropdowns` AS `glpi_customdropdowns_softwaretypdropdowns_dropdowns_dropdowns_id_softwaretypfield_5a6f5b8b22d7b77565dfdee676f2bbde` ON (`glpi_plugin_fields_softwareberdiesoftwares`.`dropdowns_dropdowns_id_softwaretypfield` = `glpi_customdropdowns_softwaretypdropdowns_dropdowns_dropdowns_id_softwaretypfield_5a6f5b8b22d7b77565dfdee676f2bbde`.`id`) WHERE ((1)) AND `glpi_softwares`.`is_deleted` = 0 AND `glpi_softwares`.`is_template` = 0 ) AS id_criteria )) AS `items_count` FROM `glpi_softwarecategories` ORDER BY `glpi_softwarecategories`.`level` DESC, `glpi_softwarecategories`.`name`". In ./src/DBmysql.php(392) #0 ./src/DBmysqlIterator.php(125): DBmysql->doQuery() #1 ./src/DBmysql.php(1061): DBmysqlIterator->execute() #2 ./src/Glpi/Features/TreeBrowse.php(265): DBmysql->request() #3 ./src/Glpi/Features/TreeBrowse.php(85): Software::getTreeCategoryList() #4 ./src/Glpi/Search/SearchEngine.php(633): Software::showBrowseView() #5 [internal function]: Glpi\Search\SearchEngine::show() #6 ./src/Glpi/Application/View/Extension/PhpExtension.php(105): call_user_func_array() #7 ./files/_cache/11.0.4-1d4fbe9a-production/templates/00/003a6ac395584c90846902e31c59204b.php(55): Glpi\Application\View\Extension\PhpExtension->call() #8 ./vendor/twig/twig/src/Template.php(402): __TwigTemplate_c2de1b2a8460853f6e6c6fc1434d3d6c->doDisplay() #9 ./vendor/twig/twig/src/Template.php(358): Twig\Template->yield() #10 ./vendor/twig/twig/src/Template.php(373): Twig\Template->display() #11 ./vendor/twig/twig/src/TemplateWrapper.php(51): Twig\Template->render() #12 ./src/Glpi/Application/View/TemplateRenderer.php(170): Twig\TemplateWrapper->render() #13 ./src/Glpi/Controller/AbstractController.php(68): Glpi\Application\View\TemplateRenderer->render() #14 ./src/Glpi/Controller/GenericListController.php(51): Glpi\Controller\AbstractController->render() #15 ./vendor/symfony/http-kernel/HttpKernel.php(181): Glpi\Controller\GenericListController->__invoke() #16 ./vendor/symfony/http-kernel/HttpKernel.php(76): Symfony\Component\HttpKernel\HttpKernel->handleRaw() #17 ./vendor/symfony/http-kernel/Kernel.php(197): Symfony\Component\HttpKernel\HttpKernel->handle() #18 ./public/index.php(70): Symfony\Component\HttpKernel\Kernel->handle() #19 {main}Page URL
No response
Steps To reproduce
Also attached a small video on how to reproduce this:
view_sql_error.zip
Your GLPI setup information
GLPI information
Server
GLPI constants
SQL Replikationen
Plugins list
Anything else?
No response