大佬教程收集整理的这篇文章主要介绍了CakePHP saveAssociated未通过模型数据保存HasMany,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Database Diagram http://derekperkins.com/wp-content/uploads/cakephp-database.png
锚模型
class Anchor extends AppModel { public $hasmany = array( 'PostsUrl' => array( 'className' => 'PostsUrl','ForeignKey' => 'anchor_id','dependent' => false ) ); public function save($data = NULL,$validate = true,$fieldList = array()) { $id = Anchor::find('first',array( 'fields' => array('id'),'recursive' => -1,'conditions' => array('anchor' => $data['anchor']) )); if( $id ) $data['id'] = $id['Anchor']['id']; return parent::save($data,$validate,$fieldList); } }
网址模型
class Url extends AppModel { public $hasmany = array( 'PostsUrl' => array( 'className' => 'PostsUrl','ForeignKey' => 'url_id','dependent' => false ) ); public function save($data = NULL,$fieldList = array()) { $id = Url::find('first',array( 'fields' => array('id'),'conditions' => array('url' => $data['url']) )); if( $id ) $data['id'] = $id['Url']['id']; return parent::save($data,$fieldList); } }
PostsUrl模型
class PostsUrl extends AppModel { public $belongsTo = array( 'Post' => array( 'className' => 'Post','ForeignKey' => 'post_id' ),'Url' => array( 'className' => 'Url','ForeignKey' => 'url_id' 'Anchor' => array( 'className' => 'Url','ForeignKey' => 'anchor_id' )*/ ); }
发布模型
class Post extends AppModel { public $hasmany = array( 'PostsUrl' => array( 'className' => 'PostsUrl','ForeignKey' => 'post_id','dependent' => false ) ); public function save($data = NULL,$fieldList = array()) { $id = Post::find('first','conditions' => array('external_post_id' => $data['external_post_id']) )); if( $id ) $data['id'] = $id['Post']['id']; return parent::save($data,$fieldList); } }
提交数据
我创建了一个表单来测试我的模型.这是我用来保存表单创建的数组的代码.我收到一条消息说事情已成功保存,但只有帖子保存.其他三个表中没有输入任何内容.我也使用DebugKit,没有SQL调用引用任何数据.
$this->Post->saveAssociated($this->request->data,array('deep' => truE)) Array ( [Post] => Array ( [external_post_id] => 12345 [sentiment_score] => 3.3 ) [URL] => Array ( [url] => http://test.com ) [Anchor] => Array ( [anchor] => Test Anchor ) )
我也尝试格式化我的数组,将PostsUrl下面的URL和Anchor作为子数组,但这也不起作用.
我的Model :: save函数可以防止我复制数据,它们可以在我过去使用的其他模型中正常工作(虽然我愿意接受更好的方法来做这个,因为这会使用数据库调用每次检查).我也试过评论它们,它不会影响我的代码.我应该如何构建这个来妥善保存?
public function save($data = NULL,$fieldList = array()) { $id = Post::find('first',array( 'fields' => array('id'),'conditions' => array('external_post_id' => $data['external_post_id']) )); if( $id ) $data['id'] = $id['Post']['id']; pr($data); return parent::save($data,$fieldList); }
它以这种方式打印$data:
Array ( [id] => 3 //for example 3 [Post] => Array ( [external_post_id] => 12345 [sentiment_score] => 3.3 ) [URL] => Array ( [url] => http://test.com ) [Anchor] => Array ( [anchor] => Test Anchor ) )
这个$数据不正确,正确的数据是:
Array ( [Post] => Array ( [id] => 3 //for example 3 [external_post_id] => 12345 [sentiment_score] => 3.3 ) [URL] => Array ( [url] => http://test.com ) [Anchor] => Array ( [anchor] => Test Anchor ) )
您必须以这种方式更改Model :: save函数:
public function save($data = NULL,'conditions' => array('external_post_id' => $data['external_post_id']) )); if( $id ) $data[$this->name]['id'] = $id['Post']['id']; return parent::save($data,$fieldList); }
第二,你不能用单一保存来保存这些数据,你应该这样保存你的数据:
$postData = array ( 'Post' => array ( 'external_post_id' => 12345 'sentiment_score' => 3.3 ) ); $this->Post->save($data); $posturlId = $this->PostsUrl->find('first',array( 'conditions' => array( 'post_id' => $this->Post->id ),'fields' => array('id') )); $urlAnchorData = array( 'URL' => array ( 'url' => 'http://test.com' ),'Anchor' => array ( 'anchor' => 'Test Anchor' ),'PostsUrl' => array( 'id' => $posturlId['PostsUrl']['id'] ) ); $this->PostsUrl->saveAll('$urlAnchorData');
以上是大佬教程为你收集整理的CakePHP saveAssociated未通过模型数据保存HasMany全部内容,希望文章能够帮你解决CakePHP saveAssociated未通过模型数据保存HasMany所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。