Как редактировать модели, когда основная модель принадлежит связанной модели? - PullRequest
0 голосов
/ 23 февраля 2012

У меня есть форма редактирования, где я хотел бы обновить ряд моделей.Проблема в том, что моя основная модель, Units, принадлежит Location (так как одна локация может иметь много юнитов).В руководстве пользователя CakePHP описано, как сохранить все, когда данные связанной модели принадлежат вашей основной модели, а не как это работает в обратном порядке.Код, который я использую ниже, очевидно, не обновляет Location.address.

из edit.ctp:

<?php    
echo $this->Form->create('Unit', array('url'=>array('action' =>'edit'));
echo $this->Form->input('unitnum', array('label' => 'Unit\'s Name/Number'));
echo $this->Form->input('Location.0.address');

echo $this->Form->end('Update Property');?>

А вот код моего контроллера:

function edit($id) {
$this->Unit->id = $id;    
if (empty($this->data)) {        
$this->data = $this->Unit->read();    
} else {        
    if ($this->Unit->saveAll($this->data)) {            
        $this->Session->setFlash('Your property has been updated.');            

        }   
  }
 }

Примечание: я также попытался использовать echo $ this-> Form-> input ('Location.address');и хотя он прекрасно заполняет мое поле для меня, он все равно не обновляет адрес Location, если я его изменю.

UPDATE Я обнаружил, что когда я отправляю свою форму, тортвместо обновления адреса местоположения, ДОБАВЛЯЕТ новое местоположение со всей новой информацией!

2-е ОБНОВЛЕНИЕ Я также обнаружил, что дополнительно, в то время как торт сохранит НОВУЮ запись для СВЯЗАННЫХ данных модели(что основная модель принадлежит), она не обновляет информацию об Unit (основная модель).

1 Ответ

0 голосов
/ 24 февраля 2012

Вам нужно передать идентификатор местоположения, или он подумает, что это новый адрес.

Обычно это делается для того, чтобы показать различные местоположения в выпадающем меню (идентификатор / имя), которое позволит вам выбрать местоположение, в которое вы хотите добавить юнит.Если вы уже знаете единицу, то вам следует включить Location.id в качестве скрытого поля, а затем отображать только location.address, но не как часть формы.

...