CakePHP обновляет связанные данные

В моем проекте у меня есть две связанные модели: Company и CompanyComment. Компания имеетОдна компаниякомментарий.

Теперь, когда я хочу обновить информацию о компании через saveAssociated, я делаю это следующим образом:

Действие контроллера:

    public function edit($id = null){

        $this->Company->id=$id;

        $this->Company->recursive = 0;      

        if($this->request->is('post')|| $this->request->is('put')){


            if($this->Company->saveAssociated($this->request->data)){
                $this->Session->setFlash(__('data has been updated'), 'positive_notification');
                $this->redirect(array('controller'=>'companies', 'action'=>'overview'));
            } else{
                $this->Session->setFlash(__('Data has not been updated. '), 'negative_notification');
            }
            }else{
            $this->request->data = $this->Company->read();
            }

    }

И вид следующий:

<?php echo $this->Form->create('Company', array('enctype' => 'multipart/form-data'));?>

<fieldset>

    <?php
        echo $this->Form->input('Company.newsletter');
        echo $this->Form->input('CompanyComment.comment_1', array('label'=>__('Domas comment'))); 
        echo $this->Form->input('CompanyComment.comment_2', array('label'=>__('Sunny comment')));
        ?>


    </fieldset>
<?php echo $this->Form->end(__('Update'));?>

Вот данные запроса перед сохранением:

array(
    'Company' => array(
        'newsletter' => '1'
    ),
    'CompanyComment' => array(
        'comment_1' => 'comment1',
        'comment_2' => 'comment2'
    )
)

Но это просто не сохранило бы данные. Любая помощь или руководство очень ценятся.

Вот отношение модели компании:

var $hasOne = 'CompanyComment';

Еще одно замечание: первичный ключ таблицы CompanyComment — это company_id, а не автоматически увеличивающийся идентификатор.


person Domas    schedule 23.06.2014    source источник


Ответы (2)


Попробуй это

public function edit($id = null){

    $this->Company->id=$id;

    $this->Company->recursive = 0;     <--Remove this line

    if($this->request->is('post')|| $this->request->is('put')){

 //Change here saveAssociated to saveAll like following
        if($this->Company->saveAll($this->request->data)){
            $this->Session->setFlash(__('data has been updated'), 'positive_notification');
            $this->redirect(array('controller'=>'companies', 'action'=>'overview'));
        } else{
            $this->Session->setFlash(__('Data has not been updated. '), 'negative_notification');
        }
        }else{
        $this->request->data = $this->Company->read();
        }

}
person Sadikhasan    schedule 23.06.2014
comment
Спасибо за быстрый ответ, но все равно не сохраняет и выдается флеш сообщение. Если есть какая-либо другая важная информация, которую я мог бы предоставить, просто дайте мне знать. - person Domas; 23.06.2014
comment
У вас есть поля comment_1 и comment_2 в таблице CompanyComment? - person Sadikhasan; 23.06.2014
comment
да, конечно, и действие просмотра работает так, как должно, все поля извлекаются и т. д. Только не обновление. - person Domas; 23.06.2014
comment
Я только что обновил вопрос еще одним комментарием: первичным ключом таблицы CompanyComment является company_id, а не поле идентификатора с автоматическим увеличением. - person Domas; 23.06.2014
comment
Вы отлаживали свой код, какой тип SQL-запроса был сделан? - person Sadikhasan; 23.06.2014
comment
Единственный запрос, который сделал во время сохранения, это: SELECT COUNT(*) AS count` FROM development.companies AS Company WHERE Company.id = 57` - person Domas; 23.06.2014
comment
Вы правильно установили связь между двумя таблицами? - person Sadikhasan; 23.06.2014
comment
Единственное отношение, которое, по моему мнению, было необходимо, это компания hasOne CompanyComment. Я не ошибаюсь? - person Domas; 23.06.2014
comment
Да вы правы но где и как давать? Вы уверены, что исправите отношения, указанные вами - person Sadikhasan; 23.06.2014
comment
Когда я получаю информацию о компании в любом представлении, комментарии также извлекаются, поэтому отношения работают как надо, но возникают проблемы при сохранении. - person Domas; 23.06.2014
comment
Если вы уверены, что отношения в порядке, то они должны работать, потому что данный код идеален, вам нужно отлаживать тему, где проблема. - person Sadikhasan; 23.06.2014

Ты сказал:

Еще одно замечание: первичный ключ таблицы CompanyComment — это company_id, а не автоматически увеличивающийся идентификатор.

Вы изменили это на своей модели?

http://book.cakephp.org/2.0/en/models/model-attributes.html

class CompanyComment extends AppModel {
    public $primaryKey = 'company_id';
}
person Timber    schedule 23.06.2014