如何摆脱教条查询中的主列

时间:2010-07-21 17:39:42

标签: doctrine-query

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会破坏学说的有用性。

2 个答案:

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