Во-первых, я давно использую CakePHP, и я очень доволен API. Я почти уверен, что это будет ошибка face-palm , но мне понадобятся свежие взгляды на это, потому что я застрял более часа.
У меня есть три модели: User
, Job
и Company
.
Company
имеет много User
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 за указание на правильный путь отладки. Слава Богу за контроль версий.