开发者

Saving hasOne with HABTM in CakePHP

开发者 https://www.devze.com 2023-01-28 06:27 出处:网络
This problem occurred when I added a hasOne relationship to one of the habtm models. categories_posts now do not save anything in the database. I did before.

This problem occurred when I added a hasOne relationship to one of the habtm models. categories_posts now do not save anything in the database. I did before.

Right now, the form I have is this:

<?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');
?>

Page Model looks like this:

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'
  ));
}

Post model looks like this:

class Post extends AppModel {
 var $name = 'Post';
 var $hasAndBelongsToMany = array(
  'Catego开发者_StackOverflow社区ry' => 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)'
 );

}

Category Model looks like this:

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

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

my tables somewhat looks like this:

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

This is the method that does the saving

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'); 
        }
    }
}

This is a sample array when submitting:

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"
  }
}

Why isn't categories_posts saving?


It seems that all I needed to do was to have this in the form:

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

精彩评论

暂无评论...
验证码 换一张
取 消