Сохранение hasOne с HABTM в CakePHP - PullRequest
0 голосов
/ 01 декабря 2010

Эта проблема возникла, когда я добавил отношение hasOne к одной из моделей habtm.categories_posts теперь ничего не сохраняйте в базе данных.Я делал раньше.

Прямо сейчас, у меня есть такая форма:

<?php
echo $this->Form->create('Post');
echo $this->Form->input('Post.title');
echo $this->Form->input('Post.Category', array('multiple' => 'checkbox'));
echo $this->Form->input('Post.body', array('rows' => '3'));

echo $this->Form->input('Page.title');
echo $this->Form->input('Page.uri');
echo $this->Form->input('Page.meta_keywords');
echo $this->Form->input('Page.meta_description');
echo $this->Form->input('Page.layout');

echo $this->Form->end('Save Post');
?>

Модель страницы выглядит следующим образом:

class Page extends AppModel {
 var $name = 'Page';
 var $order = array('Page.modified' => 'desc');

 var $hasOne = array(
  'Post' => array(
   'className' => 'Post'
  ));

 var $hasMany = array(
  'Snippet' => array(
   'className' => 'Snippet'
  ));
}

Модель сообщения выглядит следующим образом:

class Post extends AppModel {
 var $name = 'Post';
 var $hasAndBelongsToMany = array(
  'Category' => array(
   'className' => 'Category'
  )
 );
 var $belongsTo = array(
  'Page' => array(
   'className' => 'Page'
  )
 );
 var $actsAs = array('Containable');
 var $virtualFields = array(
  'date_posted' => 'DATE_SUB(Post.created, INTERVAL 7 DAY)'
 );

}

Категория Модель выглядит следующим образом:

class Category extends AppModel {
    var $name = 'Category';
    var $hasAndBelongsToMany = array(
        'Post' => array(
            'className' => 'Post'
        )
    );

    var $actsAs = array('Containable');
}

мои таблицы выглядят примерно так:

categories
id name

categories_posts
category_id post_id

pages
id title uri meta_keywords meta_description layout created modified

posts
id page_id title uri body created modified

Это метод, который делает сохранение

function admin_add() {
    $this->set('categories', $this->Post->Category->find('list'));

    if ( ! empty($this->data)) {
        if ($this->Post->saveAll($this->data)) {
            $this->Session->setFlash('Your post has been saved', 'flash_good');
            $this->redirect($this->here);
        } else {
            $this->Session->setFlash('Your post has not been saved','flash_bad'); 
        }
    }
}

Это образец массива при отправке:

array(2) {
  ["Post"]=>
  array(3) {
    ["title"]=>
    string(10) "Post Title"
    ["Category"]=>
    array(4) {
      [0]=>
      string(1) "1"
      [1]=>
      string(1) "2"
      [2]=>
      string(1) "3"
      [3]=>
      string(1) "4"
    }
    ["body"]=>
    string(16) "<p>Post Body</p>"
  }
  ["Page"]=>
  array(5) {
    ["title"]=>
    string(10) "Page Title"
    ["uri"]=>
    string(0) ""
    ["meta_keywords"]=>
    string(11) "Page Meta K"
    ["meta_description"]=>
    string(11) "Page Meta D"
    ["layout"]=>
    string(11) "Page Layout"
  }
}

Почему categories_posts не сохраняется?

1 Ответ

1 голос
/ 01 декабря 2010

Похоже, все, что мне нужно было сделать, это иметь форму:

echo $this->Form->input('Category.Category', array('multiple' => 'checkbox'));
...