как избавиться от первичного столбца в запросах доктрины - PullRequest
0 голосов
/ 21 июля 2010

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 ]

2 голосов
/ 27 апреля 2012

Вы должны установить некоторый столбец этой таблицы как первичный в setTableDefinition, чтобы доктрина не использовала первичный по умолчанию в качестве идентификатора. Допустим, вы 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, это запрещает доктрине использовать id в качестве первичного ключа по умолчанию (даже если он даже не определен в файле определения таблицы.

1 голос
/ 12 февраля 2011

Это не самое симпатичное решение, но вы можете вызвать isSubquery (true) для Doctrine_Query, чтобы удалить первичный ключ, в вашем случае s.id.

http://www.doctrine -проект.орг / API / ОРМ / 1,2 / доктрина / doctrine_query.html # isSubquery ()

...