У меня проблема с регистром имени столбца в Doctrine версии 1.1.0.
У меня есть запись (сущность) с этим определением:
abstract class BaseProductsXsell extends Doctrine_Record
{
public function setTableDefinition()
{
$this->setTableName('products_xsell');
$this->hasColumn('ID', 'integer', 4, array('type' => 'integer', 'length' => 4, 'primary' => true, 'autoincrement' => true));
$this->hasColumn('products_id', 'integer', 4, array('type' => 'integer', 'length' => 4, 'unsigned' => 1, 'default' => '1', 'notnull' => true));
// and so on...
}
}
В таблице базы данных MySQL имя столбца «ID» также указано в верхнем регистре. Но когда я пытаюсь получить имена столбцов после запроса с этим:
$query = Doctrine_Query::create()->select('m.*')->from("ProductsXsell m");
$collection = $query->execute();
$columns = $collection->getTable()->getColumnNames();
print_r($columns);
Вывод выглядит следующим образом:
Array
(
[0] => id
[1] => products_id
...
)
Я нигде не устанавливал атрибут case соединения с доктриной, поэтому он должен быть значением по умолчанию (Doctrine::CASE_NATURAL).
Это приводит к следующей ошибке:
Fatal error: Uncaught exception 'Doctrine_Record_UnknownPropertyException' with message 'Unknown record property / related component "id" on "ProductsXsell"' in /opt/hocatec/bin/libs/Doctrine/Doctrine/Record/Filter/Standard.php:55
Stack trace:
#0 /opt/hocatec/bin/libs/Doctrine/Doctrine/Record.php(1282): Doctrine_Record_Filter_Standard->filterGet(Object(ProductsXsell), 'id')
#1 /opt/hocatec/bin/libs/Doctrine/Doctrine/Record.php(1240): Doctrine_Record->_get('id', true)
#2 /opt/hocatec/bin/libs/Doctrine/Doctrine/Access.php(117): Doctrine_Record->get('id')
#3 /opt/hocatec/bin/models/HocaSync.php(368): Doctrine_Access->offsetGet('id')