Propel - 如何自动设置PHP的列名与DB中的列名相同

时间:2015-09-21 10:05:07

标签: propel

我使用了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)。
我知道我可以强制Propel通过使用每列phpName =“timeBegin”等来做到这一点(就像我在上面的例子中所做的那样),但我觉得这很不方便。这可能是通过propel.xml

中的某些设置实现的

2 个答案:

答案 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();