我在使用Propel将新数据插入表格时遇到问题。假设表名为my_tables
,这是其Resources \ config \ schema.xml的一部分:
<table name="my_tables" phpName="MyTable">
<column name="id" type="integer" required="true" primaryKey="true" autoIncrement="true"/>
...
代码执行此操作:
$objMyTable = new MyTable();
$objMyTable->setSomeColumn('SomeValue')
->setOtherColumn('OtherValue')
->save();
我希望生成这样的东西:
INSERT INTO my_tables ('id', 'some_column', 'other_column') VALUES (123, 'SomeValue', 'OtherValue');
其中123将生成自动递增id,但我总是得到NULL而不是123值,因此报告错误。显然,自动增量不适用于此字段。任何想法我错在哪里?
BTW,表本身是在mysql数据库中设置的,所以它确实有自动增量ID,但显然PHP部分生成了错误的SQL。作为对注释中问题的回答 - 没有对此表的propel生成的基类进行自定义。我没有这个表的额外实体类,而Model / map / MyTableTableMap的例子(忽略TableTable部分,它只是一个示例名称)如下:
public function initialize()
{
// attributes
$this->setName('my_tables');
$this->setPhpName('MyTable');
$this->setClassname('Bundle\\Model\\MyTable');
$this->setPackage('src.Bundle.Model');
$this->setUseIdGenerator(true);
// columns
$this->addPrimaryKey('id', 'Id', 'INTEGER', true, null, null);
$this->addColumn(...);
... // other addColumn() calls
// validators
} // initialize()
在意识到错误地指责Propel之后,这个问题已经不再有效了。有一个数据问题,并且没有引起它的唯一索引。