From a7c8e45f90d0bec18a94b043a8fee4497e6ce54b Mon Sep 17 00:00:00 2001 From: Jamison Bryant Date: Thu, 8 Jan 2026 11:27:01 -0500 Subject: [PATCH] Fix CakePHP 5.3 compatibility in ModelPropertyFactory Use public API methods instead of __debugInfo() for accessing column metadata and primary key information. In CakePHP 5.3, TableSchema stores columns and constraints as objects rather than arrays, causing __debugInfo() to return Column/Constraint objects instead of arrays. Changes: - Replace __debugInfo() with getColumn() for column default value - Simplify isPrimaryKey() to use getPrimaryKey() public API Both getColumn() and getPrimaryKey() are stable public API methods that return arrays for backwards compatibility. Fixes mixerapi/mixerapi-dev#159 --- src/Model/ModelPropertyFactory.php | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/src/Model/ModelPropertyFactory.php b/src/Model/ModelPropertyFactory.php index 10b4516..2b8952b 100644 --- a/src/Model/ModelPropertyFactory.php +++ b/src/Model/ModelPropertyFactory.php @@ -34,34 +34,27 @@ public function __construct( */ public function create(): ModelProperty { - $vars = $this->schema->__debugInfo(); - $default = $vars['columns'][$this->columnName]['default'] ?? ''; + $column = $this->schema->getColumn($this->columnName); + $default = $column['default'] ?? ''; return (new ModelProperty()) ->setName($this->columnName) ->setType($this->schema->getColumnType($this->columnName)) ->setDefault((string)$default) - ->setIsPrimaryKey($this->isPrimaryKey($vars, $this->columnName)) + ->setIsPrimaryKey($this->isPrimaryKey()) ->setIsHidden(in_array($this->columnName, $this->entity->getHidden())) ->setIsAccessible($this->isAccessible()) ->setValidationSet($this->table->validationDefault(new Validator())->field($this->columnName)); } /** - * @param array $schemaDebugInfo debug array from TableSchema - * @param string $columnName column name + * Checks if this column is part of the primary key. + * * @return bool */ - private function isPrimaryKey(array $schemaDebugInfo, string $columnName): bool + private function isPrimaryKey(): bool { - // ignore coverage since this condition should not be met - if (!isset($schemaDebugInfo['constraints']['primary']['columns'])) { - // @codeCoverageIgnoreStart - return false; - // @codeCoverageIgnoreEnd - } - - return in_array($columnName, $schemaDebugInfo['constraints']['primary']['columns']); + return in_array($this->columnName, $this->schema->getPrimaryKey()); } /**