24
Авг

Особенности whereIn в Doctrine

В принципе логичное поведение, но если его не знать, можно словить не приятный баг.
Суть если в функцию whereIn передать пустой массив, то в запрос выражение с IN, подставлено не будет.
Пример:

$ignore = array(); // подразумевается, что здесь должен быть массив с айдишниками, но по какой-то причине он пустой.
$query = Doctrine_Query::create()
    ->select('a.*')
    ->from('Account a')
    ->whereNotIn('a.id', $ignore);
print $query->getSqlQuery(); // Будет 'SELECT * FROM account' - без выражения WHERE

5
Май

Doctrine 1.2: сортировка связей

Чтобы связанные объекты выводились в определенном нами порядке, при описании модели можно указать поле по которому будет вестись сортировка.

Пример:

Image:
  columns:
    # .... необходимые поля
    pos: { type: integer, notnull: true, default: 0}  # поле по которому будет вестись сортировка
    product_id: {type: integer}

Product:
   # .... необходимые поля
  relations:
    Images:
      type: many
      class: Image
      local: id
      foreign: product_id
      onDelete: 'SET NULL'
      orderBy: 'pos ASC' # <- указываем по какому полю сортировать

Данная заметка касается версии Doctrine 1.2. Как я знаю в более старых версиях, подобное приходилось решать самостоятельно правкой классов в дистрибутиве Doctrine.