Не удается сохранить встроенную форму в Symfony 1.4.8 с SQL Server, Propel15 - PullRequest
1 голос
/ 14 февраля 2011

У меня есть отношение событий 1: M к датам событий.В классе EventForm я встраиваю формы EventDate следующим образом:

$this->embedRelation('EventDate', array('title' => 'dates', 'empty_label' => 'New'));

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

  public function updateDefaultsFromObject()
  {
    parent::updateDefaultsFromObject();

      $i = 1;
      $values = array();
      foreach ($this->object->getEventDates() as $obj)
      {
        $values[$i] = array(
                    'EventID' => $this->object->getPrimaryKey(),
                    'EventDateID' => $obj->getEventDateId(),
                    'startDateTime' => $obj->getStartDateTime(),
                    'endDateTime' => $obj->getEndDateTime());
        $i++;
      }

    $this->setDefault('dates', $values);
  }

Проблема заключается в том, когда он пытаетсячтобы сохранить, я получаю:

Unable to execute UPDATE statement [UPDATE EventDates SET EVENTDATEID=:p1
WHERE EventDates.EVENTDATEID IS NULL ] [wrapped: SQLSTATE[HY000]: General 
error: 8102 General SQL Server error: Check messages from the SQL Server 
[8102] (severity 16) [(null)]]

Ошибка MSSql 8102 в том, что он пытается обновить столбец идентификатора, который EVENTDATEID.Я понятия не имею, почему он это делает.Кроме того, у меня есть чувство, судя по выражению update, что в $ this-> object-> getEventDates () есть пустой объект, который он пытается обновить.Если бы я мог как-то это исправить, я предполагаю (см .: молитесь), что это исправит эту ошибку.

1 Ответ

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

Я наконец понял это. Ключи массива для установки значений в этом блоке

открытая функция updateDefaultsFromObject () { Родитель :: updateDefaultsFromObject ();

  $i = 1;
  $values = array();
  foreach ($this->object->getEventDates() as $obj)
  {
    $values[$i] = array(
                'EventID' => $this->object->getPrimaryKey(),
                'EventDateID' => $obj->getEventDateId(),
                'startDateTime' => $obj->getStartDateTime(),
                'endDateTime' => $obj->getEndDateTime());
    $i++;
  }

$this->setDefault('dates', $values);

были неправы. Предполагается, что они используют фактические имена столбцов, а не имена переменных PHP. Поэтому я должен был изменить

'EventID' => $this->object->getPrimaryKey(),
'EventDateID' => $obj->getEventDateId(),

до

'eventID' => $this->object->getPrimaryKey(),
'eventdateID' => $obj->getEventDateId(),
...