Продвигайте чувствительные к регистру phpNames для столбцов

Соответствующая часть моего schema.xml:

<database name="Inventory" defaultIdMethod="native">
  <table name="Users" phpName="User">
    <column name="UserId" type="varchar" size="20" required="true" primaryKey="true" />
    <column name="FirstName" type="varchar" size="255" required="true" />
    <column name="LastName" type="varchar" size="255" required="true" />
    <column name="Password" type="varchar" size="255" required="true" />
    <column name="Salt" type="char" size="22" required="true" />
    <column name="RoleId" type="integer" required="true" />
    <column name="FailedLogins" type="integer" required="true" defaultValue="0" />
    <column name="LockedOut" type="boolean" required="true" defaultValue="false" />
    <column name="Active" type="boolean" required="true" defaultValue="true" />
  </table>
...
</database>

Следующая команда завершается ошибкой с PropelException:

UserQuery::create()
    ->filterByActive(true)
    ->update(array('FailedLogins' => 0, 'LockedOut' => false));

Ошибка:

[Sat Nov 19 16:28:01 2011] [error] [client 127.0.0.11] PHP Fatal error:  Uncaught exception 'PropelException' with message 'Cannot fetch ColumnMap for undefined column phpName: FailedLogins' in /home/andrew/pss-repository/vendor/propel/runtime/lib/map/TableMap.php:372\nStack trace:\n#0 /home/andrew/pss-repository/vendor/propel/runtime/lib/query/ModelCriteria.php(1668): TableMap->getColumnByPhpName('FailedLogins')\n#1 /home/andrew/pss-repository/vendor/propel/runtime/lib/query/ModelCriteria.php(1626): ModelCriteria->doUpdate(Array, Object(PropelPDO), false)\n#2 /home/andrew/pss-repository/login-reset-process.php(11): ModelCriteria->update(Array)\n#3 {main}\n  thrown in /home/andrew/pss-repository/vendor/propel/runtime/lib/map/TableMap.php on line 372, referer: http://pss/login-reset-all.php

Я могу убедиться, что столбец FailedLogins идентифицируется как Failedlogins в коде, сгенерированном Propel. Я понимаю, что, вероятно, могу добавить phpName к рассматриваемым столбцам, но мне было интересно, не пропустил ли я параметр конфигурации. Я проверил страницу конфигурации времени сборки Propel и увидел параметр под названием propel.samePhpName, но поскольку он находится в разделе «Обратное проектирование», похоже, это не тот вариант, который мне нужен. Другие задавали похожие вопросы, но я не видел четкий ответ.

Есть ли вариант конфигурации, чтобы phpName каждого столбца просто соответствовало атрибуту name в схеме?


person Andrew    schedule 19.11.2011    source источник


Ответы (1)


Нет, нет способа сделать это, ни свойства сборки.

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

<table name="Users" phpName="User">
  <column name="user_id" type="varchar" size="20" required="true" primaryKey="true" />
  <column name="first_name" type="varchar" size="255" required="true" />
  <column name="last_name" type="varchar" size="255" required="true" />
  <column name="password" type="varchar" size="255" required="true" />
  <column name="salt" type="char" size="22" required="true" />
  <column name="role_id" type="integer" required="true" />
  <column name="failed_logins" type="integer" required="true" defaultValue="0" />
  <column name="locked_out" type="boolean" required="true" defaultValue="false" />
  <column name="active" type="boolean" required="true" defaultValue="true" />
</table>

Таким образом вы получите UserId, …, FailedLogins, …

Уильям

person William Durand    schedule 20.11.2011
comment
Спасибо. Вот что мне нужно было знать. Я знал об автоматическом преобразовании в phpName, которое вы описываете при использовании символов подчеркивания, но я привык использовать соглашение об именах PascalCase в базах данных. Если у меня будет время, я посмотрю, смогу ли я представить патч, но я не знаю, когда это будет. - person Andrew; 20.11.2011