2015-09-21 1 views
0

Я использовал Propel 2 и хочу, чтобы имена столбцов для PHP были такими же, как в DB. Я использовал schema.xml так:Propel - как я могу установить имя столбца для PHP так же, как и в БД автоматически

<?xml version="1.0" encoding="UTF-8"?> 
 
<database name="timetable" defaultIdMethod="native"> 
 
\t <table name="entry" phpName="Entry"> 
 
\t \t <column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" /> 
 
\t \t <column name="date" type="date" required="true" /> 
 
\t \t <column name="timeBegin" phpName="timeBegin" type="time" required="true" /> 
 
\t \t <column name="timeEnd" type="time" required="true" /> 
 
\t \t <column name="description" type="varchar" size="128" required="true" /> 
 
\t \t <column name="expert_id" type="integer" required="true"/> 
 
\t \t <column name="project_id" type="integer" required="true"/> 
 
\t \t <foreign-key foreignTable="expert" phpName="Expert" refPhpName="Entry"> 
 
\t \t \t <reference local="expert_id" foreign="id"/> 
 
\t \t </foreign-key> 
 
\t \t <foreign-key foreignTable="project" phpName="Project" refPhpName="Entry"> 
 
\t \t \t <reference local="project_id" foreign="id"/> 
 
\t \t </foreign-key> 
 
\t </table> 
 
</database>

Propel генерирует от этого названия для таблиц и столбцов. Имена в базе данных mySQL записываются корректно, как описано в schema.xml. Но по умолчанию Propel генерирует имена столбцов в PHP с большой буквы, а все позади - строчными буквами. Это не то, что я хочу, я, например, «T IME е й» вместо «т IME E й» Посмотрите на этот простой запрос:

<?php 
 
\t require 'vendor/autoload.php'; 
 
\t include "generated-conf/config.php"; 
 
\t 
 
\t $entry = EntryQuery::create() 
 
\t ->find() 
 
\t ->exportTo('JSON'); 
 
\t 
 
\t echo $entry;
Она производит:
{"Entries":{"Entry_0":{"Id":1,"Date":"11.09.2015","timeBegin":"09:00","Timeend":"19:00","Description":"","ExpertId":5,"ProjectId":7}}} То, что я хочу это: я d, d ели, т IME В Egin, т IME Е й, д ПИСАНИЕ, е xpertId, р rojectId (или expert_id, project_id).
Я знаю, что могу заставить Propel сделать это, используя для каждого столбца phpName = «timeBegin» и т. Д. (Например, я просто для демонстрации в примере выше), но я считаю это неудобным. Это должно быть возможно с помощью некоторых настроек, возможно, в propel.xml

ответ

1

Вы можете использовать метод toArray для возврата с именами столбцов.

$entry = EntryQuery::create() 
    ->find() 
    ->toArray(null, null, \Propel\Runtime\Map\TableMap::TYPE_FIELDNAME); 

Вы можете видеть фрагмент кода здесь:

http://sandbox.propelorm.org/46731f6

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

0

Вы можете использовать регулярное выражение, чтобы исправить schema.xml удалить phpName atribute только для столбцов

поиск:

phpName="(\w)*" type

заменить: type

Затем восстановить свои модели ....

model:build

Безобразная побочный эффект вы будете иметь это поглощающие/присваиватели превращается в это ...

$object->getid(); $object->gettimebegin();

Смежные вопросы