Простая проблема сохранения CakePHP ActiveRecord: почему поле сохраняет `NULL` вместо значения, которое я ему присваиваю? - PullRequest
0 голосов
/ 16 февраля 2011

Во-первых, я давно использую CakePHP, и я очень доволен API. Я почти уверен, что это будет ошибка face-palm , но мне понадобятся свежие взгляды на это, потому что я застрял более часа.

У меня есть три модели: User, Job и Company.

  1. Company имеет много User
  2. Company имеет много Job

Иногда, когда пользователь обновляет запись задания, ему нужно изменить поле задания company_id. Когда это происходит, у меня также есть требование изменить собственное поле company_id пользователя. Таким образом, по сути, User и Job будут переназначены другой компании.

В методе обновления CRUD для JobsController я добавил эту логику:

$this->Job->User->read(NULL, $this->Session->read('User.id'));
$this->Job->User->set('company_id', $this->data['Job']['company_id']);
$this->Job->User->save();

Я проверил, используя типичные методы отладки, такие как var_dump(), что $this->Session->read('User.id') содержит правильное значение, а $this->data['Job']['company_id'] содержит правильное значение, которое было отправлено из помощника формы.

Обновлена ​​правильная запись User, поскольку отметка времени modified в таблице указывает, что это так, но поле company_id установлено на NULL вместо правильного company_id из массива данных. .

Интересно, что после вышеприведенного фрагмента я сохраняю запись Job, и она действительно обновляется с правильным company_id (используя тот же массив $this->data).

Просто $this->Job->User->save() передает значение NULL в таблицу.

Оказывается, новый младший разработчик обезьяны с кодом на следующем этапе процесса приложения. Этот разработчик пытался выполнить тот же тикет и неправильно выполнял метод сохранения, загруженный NULL данными ( после сохранения данных задания, поэтому я не заметил, так как работал до сохранение задания ...).

В любом случае, прогуливаясь по дампу SQL, я нашел ошибку, поэтому следует отдать должное @dhofstet за указание на правильный путь отладки. Слава Богу за контроль версий.

Ответы [ 2 ]

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

Почему так сложно?

простой

$this->Job->User->save($this->data);

воля к подвоху

при условии, что вы заполните массив [User] [company_id] и т. Д.

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

Вы проверили, что $ this-> data ['Job'] ['company_id'] не равно нулю?Возможно, есть проблема с проверкой.Вы пробовали вместо saveField установить и сохранить?

...