我使用了Propel 2,并希望让PHP的列名与DB中的列名相同。我使用了这样的schema.xml:
<?xml version="1.0" encoding="UTF-8"?>
<database name="timetable" defaultIdMethod="native">
<table name="entry" phpName="Entry">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true" />
<column name="date" type="date" required="true" />
<column name="timeBegin" phpName="timeBegin" type="time" required="true" />
<column name="timeEnd" type="time" required="true" />
<column name="description" type="varchar" size="128" required="true" />
<column name="expert_id" type="integer" required="true"/>
<column name="project_id" type="integer" required="true"/>
<foreign-key foreignTable="expert" phpName="Expert" refPhpName="Entry">
<reference local="expert_id" foreign="id"/>
</foreign-key>
<foreign-key foreignTable="project" phpName="Project" refPhpName="Entry">
<reference local="project_id" foreign="id"/>
</foreign-key>
</table>
</database>
Propel通过这个生成表和列的名称。 mySQL数据库中的名称以正确的方式编写,正如schema.xml中所述。但默认情况下,Propel会使用大写字母为PHP生成列的名称,后面的所有内容都是小写的。这不是我想要的,我得到的例子是“ T ime e nd”而不是“ t ime E ND” 看看这个简单的查询:
<?php
require 'vendor/autoload.php';
include "generated-conf/config.php";
$entry = EntryQuery::create()
->find()
->exportTo('JSON');
echo $entry;
{"Entries":{"Entry_0":{"Id":1,"Date":"11.09.2015","timeBegin":"09:00","Timeend":"19:00","Description":"","ExpertId":5,"ProjectId":7}}}
我想要的是:我 d, d 吃, t ime B egin, t < / strong> ime E nd, d escription, e xpertId, p rojectId(或expert_id,project_id)。 中的某些设置实现的
答案 0 :(得分:1)
您可以使用toArray方法返回列名。
$entry = EntryQuery::create()
->find()
->toArray(null, null, \Propel\Runtime\Map\TableMap::TYPE_FIELDNAME);
您可以在此处看到一个代码段:
http://sandbox.propelorm.org/46731f6
生成的JSON的根有点不同,但我相信你可以解决这个问题。
答案 1 :(得分:0)
您可以使用正则表达式修复schema.xml以仅删除列
的phpName属性搜索:
phpName="(\w)*" type
取代:
type
然后重建你的模型......
model:build
你将遇到一个丑陋的副作用是getter / setter方法变成了这个......
$object->getid();
$object->gettimebegin();