Doctrine始终在查询中包含ID列,例如:
$new_fees = Doctrine::getTable('Stats')->createQuery('s')
->select('s.sid')->where('s.uid = ?', $this->uid)
->andWhere('s.operation = ?', PPOperationType::FEE_PAID_BY_REFERRED_OWNER)
->andWhere('s.created_at > ?', $lastwd)
->groupBy('s.sid')->execute();
不起作用,因为包括了s.id(我没有问过学说)。如何摆脱id列?必须在这里使用原始SQL会破坏学说的有用性。
答案 0 :(得分:2)
您必须将该表的某些列设置为setTableDefinition中的主要列,以便该doctrine不使用default primary作为id。 让我们说你sid是你真正的主键..然后......
public function setTableDefinition(){
....
$this->hasColumn('sid', 'decimal', 2, array(
'type' => 'decimal',
'length' => 2,
'unsigned' => 0,
'primary' => true,
'default' => '0',
'notnull' => true,
'autoincrement' => false,
));
}
注意'primary' => true
,这会阻止doctrine使用id作为默认主键(即使它甚至没有在表定义文件中定义。
答案 1 :(得分:1)
这不是最漂亮的解决方案,但您可以在Doctrine_Query上调用isSubquery(true)来删除主键,在您的情况下为s.id。
http://www.doctrine-project.org/api/orm/1.2/doctrine/doctrine_query.html#isSubquery()