【发布时间】:2011-07-21 08:26:23
【问题描述】:
我正在做一个 symfony 项目,我需要查询多对多关系,所以我创建了这个基于标准的函数来查询数据库:
//Create Criteria Object
$c1 = new Criteria();
//Selecting the rows in the link table that matches the Table1 id (parameter)
$c1->add(LinktablePeer::TBL1_CODIGO,$parameter,Criteria::EQUAL);
//Selecting the rows in Table2 that matched with the last query
$c1->addJoin(LinktablePeer::TBL2_CODIGO,Table2Peer::TBL2_CODIGO);
$list = LinktablePeer::doSelect($c1);
但它给我带来了这个奇怪的错误
[包装:SQLSTATE[42S22]:未找到列:1054 未知列 '字段列表'中的'link_table.ID']
很奇怪,因为我在该表中没有名为 ID 的列。为什么会这样?我该如何解决?
换句话说就是问题:
php symfony propel:build-model 命令是否有一个选项可以防止为那些没有主键的表生成“ID”列?
谢谢你的时间;)
【问题讨论】:
-
我知道不是解决方案,但是测试代码,我发现在 BaseLinkTablePeer 类中有一个名为 ID 的属性,并且注释了对该属性的所有引用,该错误不会出现。这可能是一个自动生成的属性,应该是主键吗?
-
您的表中有主键吗?我的意思是唯一标识记录的字段(属性:
primaryKey: true)。 -
不,它是一个链接表,所以它的主键是链接表的主键的组合。我该如何指定?
-
尝试在这2个字段中添加2个主键属性:
tbl_codigo: { type: integer, required: true, primaryKey: true, foreignClass: Table1, foreignReference: id, onDelete: CASCADE }tb2_codigo: { type: integer, required: true, primaryKey: true, foreignClass: Table2, foreignReference: id, onDelete: CASCADE } -
如果我直接从 schema.yml 创建模型,这将是解决方案。问题是我从现有的 SQL 数据库生成了模式,并且在这个模型中有很多这样的链接表导致错误,所以手动修改模式中的所有链接表不是解决方案。我要求
propel:build-model命令的配置选项,如果未在架构中定义,该选项会阻止生成主键。
标签: mysql symfony1 criteria propel