2015-09-21 2 views
0

J'ai utilisé Propel 2 et je veux avoir les noms de colonne pour PHP tout comme ils sont dans la DB. J'ai utilisé un schema.xml comme ceci:Propel - comment puis-je définir le nom de la colonne pour PHP même que dans DB automatiquement

<?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 génère par cela les noms des tables et des colonnes. Les noms dans la base de données mySQL sont écrits correctement, comme décrit dans le fichier schema.xml. Mais par défaut, Propel génère les noms des colonnes en PHP avec une majuscule et tout ce qu'il y a derrière est en minuscule. Ce n'est pas ce que je veux, je suis par exemple "T ime e e" au lieu de "t ime E e" Regardez cette requête facile:

<?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;
elle produit:
{"Entries":{"Entry_0":{"Id":1,"Date":"11.09.2015","timeBegin":"09:00","Timeend":"19:00","Description":"","ExpertId":5,"ProjectId":7}}} ce que je veux est la suivante: i d, d mangé, t ime B Egin, t ime E nd, d escription, e xpertId, p rojectId (ou expert_id, project_id).
Je sais que je peux forcer Propel à le faire en utilisant pour chaque colonne phpName = "timeBegin" et ainsi de suite (comme je le fais juste pour demonstraiting dans l'exemple ci-dessus), mais je trouve cela gênant. Cela devrait être possible par certains paramètres peut-être dans le propel.xml

Répondre

1

Vous pouvez utiliser la méthode toArray pour retourner avec les noms de colonnes.

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

Vous pouvez voir un extrait ici:

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

Le résultat racine de JSON est un peu différent, mais je suis sûr que vous pouvez contourner ce problème.

0

Vous pouvez utiliser un regex pour fixer le schema.xml pour enlever le atribute phpName uniquement pour les colonnes

recherche:

phpName="(\w)*" type

remplacerons: type

ensuite reconstruire vos modèles ....

model:build

Un effet secondaire laid que vous aurez est le getter/setter méthodes se transforme en cette ...

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