Проблема при сохранении поля ENUM в MySQL с использованием symfony1.4 / Doctrine с использованием вызова jquery ajax - PullRequest
0 голосов
/ 21 апреля 2011

Я в настоящее время нахожусь в проекте, который получает приложения, и у части, в которой я сейчас нахожусь, есть грейдер, который назначает ручную оценку для приложения.Возможными значениями являются значения enum, хранящиеся в поле MySQL.По какой-то причине я не могу получить значение для фактического сохранения в базе данных.

Я попробовал Doctrines Rawsql, и я попробовал метод ниже (что я ожидал бы работать).Я провел тестирование, чтобы убедиться, что значения, полученные на стороне сервера, соответствуют полю перечисления SQL.Я попытался включить как можно больше кода, который, по моему мнению, относится к проблеме, но если есть еще что-то, просто дайте мне знать!

Функция для обновления поля в БД.

public function executeSetLongAnswerGrade(sfWebRequest $request){

    $application = $this->getRoute()->getObject();
    if($request->isXmlHttpRequest()){
        if($request->getParameter("methodCall") == "Passion"){
            $application->setGradepassion($request->getParameter('value'));
            return true;
        }elseif($request->getParameter("methodCall") == "Grammer"){
            $application->setGradegrammer($request->getParameter('value'));

        }elseif($request->getParameter('methodCall') == "Thought"){
            $application->setGradethought($request->getParameter('value'));
            return true;
        }
        $application->save();
        return true;
    }
}

Маршрут:

ajaxSetLongAnswerGrade:
  url:          /setLongAnswerGrade/:applicationId
  class:        sfDoctrineRoute
  options:      { model: Application, type: object}
  param:        { module: application, action: SetLongAnswerGrade } 
  requirements: 
    id:         \d+ 
    sf_method:  [get]

Ajax Вызов:

$(document).ready(function(){
$('#passionMSG').hide();
$('#grammerMSG').hide();
$('#thoughtMSG').hide();
$('.passionSuccess').hide();$('.passionError').hide();
$('.grammerSuccess').hide();$('.grammerError').hide();
$('.thoughtSuccess').hide();$('.thoughtError').hide();
$('#passion').change(function()
{
    $('#passion').attr('disabled', true);
            $('.passionSuccess').hide();
            $('#passionMSG').slideDown(200);
            $('.passionError').hide();
    $.ajax({
                url: '<?php echo url_for2('ajaxSetLongAnswerGrade', $application) ?>',
          data: { methodCall: "Passion",
                              value: this.value} ,
          success: function(data) {
              $('#passion').attr('disabled', false);
                              $('#passionMSG').slideUp(1500)
                              $('.passionSuccess').delay(1300).slideDown(2000);
          },
                      error: function(){
                              $('#passion').attr('disabled', false);
                              $('#passionMSG').slideUp(1500)
                              $('.passionError').delay(1300).slideDown(2000);
                      }
        });
});});

Ответы [ 2 ]

1 голос
/ 21 апреля 2011

Когда вы используете return в действии, оно отправляет ответ ... у вас есть return в каждом из ваших условий, но вы не звоните $application->save(); в первую очередь.

Устранить возврат или сохранить вызов перед каждым возвратом:

public function executeSetLongAnswerGrade(sfWebRequest $request){

    $application = $this->getRoute()->getObject();
    if($request->isXmlHttpRequest()){
        if($request->getParameter("methodCall") == "Passion"){

            $application->setGradepassion($request->getParameter('value'));

        }elseif($request->getParameter("methodCall") == "Grammer"){

            $application->setGradegrammer($request->getParameter('value'));

        }elseif($request->getParameter('methodCall') == "Thought"){

            $application->setGradethought($request->getParameter('value'));
        }

        $application->save();
        return true;
    }
}

Я также, вероятно, пересмотрю эту логику:

public function executeSetLongAnswerGrade(sfWebRequest $request)
{
   $application = $this->getRoute()->getObject();

   if($request->isXmlHttpRequest())
   {
      $call = $request->getParameter('methodCall');
      $value = $request->getParameter('value');

      switch($call)
      {
         case 'Passion':
           $application->setGradepassion($value);
           break;
         case 'Grammer':
           $application->setGradegrammer($value);
           break;
         case 'Thought':
           $application->setGradethought($value);
           break;
         default:
           throw new Exception('Invalid methodCall.');
      }

      $application->save();

      return sfView::NONE;

   }
}
0 голосов
/ 22 апреля 2011

Это оказалось в моем файле routing.yml.Отсутствие method: find в options: { model: Application, type: object} является причиной ошибки.Сохранение происходило, но не на той записи, которую я хотел (я думал, что это неявно, но сразу после того, как я добавил это, оно начало работать).окончательный код ...

public function executeSetLongAnswerGrade(sfWebRequest $request){
$application = $this->getRoute()->getObject();
if($request->isXmlHttpRequest()){
    $application->{$request->getParameter('value')}($request->getParameter('value'));
    $application->save();
    return sfView::NONE;
}else{
    return false;
}

и AJAX ....

$('#passion').attr('disabled', true);
        $('.passionSuccess').hide();
        $('#passionMSG').slideDown(200);
        $('.passionError').hide();
$.ajax({
            url: '<?php echo url_for2('ajaxSetLongAnswerGrade', $application) ?>',
      data: { methodCall: "setGradepassion",
                          value: this.value} ,
      success: function(data) {
          $('#passion').attr('disabled', false);
                          $('#passionMSG').slideUp(1500)
                          $('.passionSuccess').delay(1300).slideDown(2000);
      },
                  error: function(){
                          $('#passion').attr('disabled', false);
                          $('#passionMSG').slideUp(1500)
                          $('.passionError').delay(1300).slideDown(2000);
                  }
    });

Я ценю руководство!Я вырос на Java и до сих пор привыкаю к ​​symfony / php.

...