2010-07-30 3 views
1

Как настроить Doctrine для автоматического запуска iconv() при построении запроса и выборке данных?Auto iconv of Doctrine query

+0

Какой версию доктрины вы используете? 2.x или 1.x? – Crozin

+0

doctrine ver 1.2 – Dziamid

ответ

1

Ну, надеюсь, никто никогда не столкнется с проблемами преобразования кодировки в своей жизни, и все кодировки, кроме UTF8, скоро ушли в прошлое. Во всяком случае, просто чтобы дать некоторые отзывы по моему собственному вопросу. Я решил, написав собственный увлажняющий, который расширяет запись увлажняющий и перекрывая некоторую Symfony prcessValues ​​методы фильтрации базовых классов, как это:

abstract class BaseFormFilterDoctrine extends sfFormFilterDoctrine 
{ 
    public function setup() 
    { 
    } 
    public function processValues($values) 
    { 
    $values = parent::processValues($values); 
    $charset = strtolower(str_replace('-','',$this->getTable()->getConnection()->getCharset())); 
    if ($charset != 'utf8') 
    { 
     foreach ($values as $key => $value) 
     { 
     if (isset($value['text'])) 
     { 
      $values[$key]['text'] = iconv('utf8', $charset, $value['text']); 
     } 
     }  
    } 

    return $values; 
    } 
} 
1

Почему бы вам просто не сказать СУБД, что вы используете для отправки данных в UTF-8? Doctrine_Connection имеет метод setCharset для этого:

$connection->setCharset('utf8'); 
+0

Это хорошо с Mysql, например. В результате доктрина добавит запрос SET NAMES. Но некоторые РСУБД не поддерживают SET NAMES (например, MSSQL). Итак, еще раз, какой самый лучший \ самый простой способ получить данные запроса в обоих направлениях. – Dziamid

0

setCollation() представляет собой соответствующий один.