Обновление текстового поля в доктрине создает исключение - PullRequest
2 голосов
/ 20 мая 2009

У меня есть текстовое поле, которое содержит, например, следующий текст: -

«Традиционное английское блюдо, состоящее из сосисок в йоркширском пудинге, обычно подается с овощами и соусом».

Это текстовое поле находится в форме, которая просто обновляет запись элемента, используя его идентификатор. Если я редактирую часть текстового поля и заменяю «и соус». с "гуманным". Так что текстовое поле теперь содержит

«Традиционное английское блюдо, состоящее из колбасок в йоркширском пудинге, обычно подается с овощами и гумусом».

Я получаю следующее исключение: -

Неустранимая ошибка: необработанное исключение 'Doctrine_Query_Exception' с сообщение 'Неизвестный псевдоним компонента смешной C: \ Projects \ закиси \ легкий \ система \ базы данных \ Doctrine \ Query \ Abstract.php: 780 Трассировки стека: C: \ Projects \ закиси \ легкий \ система \ базы данных \ Doctrine \ Query \ Abstract.php (767): Doctrine_Query_Abstract-> getQueryComponent ('humous') C: \ Projects \ nitrous \ lightweight \ system \ database \ Doctrine \ Query \ Set.php (58): Doctrine_Query_Abstract-> getAliasDeclaration ( 'гумусный') C: \ Projects \ закиси \ легкий \ система \ базы данных \ Doctrine \ Query \ Abstract.php (2092): Doctrine_Query_Set-> parse ('i.details = «А ...») C: \ Projects \ закиси \ легкий \ система \ базы данных \ Doctrine \ Query.php (1058): Doctrine_Query_Abstract -> _ processDqlQueryPart ('set', Array) C: \ Projects \ закиси \ легкий \ система \ базы данных \ Doctrine \ Query \ Abstract.php (971): Doctrine_Query-> getSqlQuery (Array) C: \ Projects \ закиси \ легкий \ система \ базы данных \ Doctrine \ Query \ Abstract.php (1030): Doctrine_Query_Abstract -> _ выполнение (Array) C: \ Projects \ закиси \ облегченной \ система \ заявл в C: \ Projects \ закиси \ легкий \ система \ базы данных \ Doctrine \ Query \ Abstract.php по линии 780

Я использую Doctrine 1.0.6, подключенную к CodeIgniter 1.7.0, если кому-то интересно.

Мой доктринальный запрос, который фактически выполняет обновление, выглядит следующим образом: -

public function updateItems($id, $arrayItem) {
    $query = new Doctrine_Query();
    $query->update('Item i');

    foreach($arrayItem as $key => $value) {
        $query->set('i.'.$key, "'".$value."'");
    }

    $query->where('i.id = ?', $id);
    return $query->execute();
}

Это кажется странным, потому что, если я заменю всю строку «Традиционное английское блюдо, включающее сосиски в йоркширском пудинге, обычно подается с овощами и гумусом». с чем-то совершенно другим, таким как просто «тест», это не вызывает исключения и работает просто отлично. Это сбивает меня с толку ... это ошибка в Doctrine или я что-то пропустил?

Ответы [ 2 ]

2 голосов
/ 20 мая 2009

Понятно, что Учение думает

  1. вы произносите его как "смешное", а не длинную строку, содержащую "смешное", и
  2. что «смешной» это не данные, а псевдоним.

Я бы сомневался, что вы делаете со строкой данных то, что, по вашему мнению, делаете. Есть ли в Doctrine параметр, позволяющий ему генерировать фактический SQL, который он генерирует?

0 голосов
/ 21 мая 2009

Я нашел решение своего вопроса. Похоже, это известная ошибка в Doctrine 1.0.6. Я обновился до Doctrine 1.1.1, и это, похоже, решило проблему.

Я бы порекомендовал попробовать разные версии Doctrine, чтобы посмотреть, решит ли это и вашу проблему! Спасибо, что ответили людям, если вы сделали.

...