CakePHP saveAssociated未通过模型数据保存HasMany

我正在尝试在Cake PHP 2.3中获取我的关联模型以便正确保存,但我遇到了问题.我正在存储帖子,我想知道这些帖子中有哪些链接.对于每个链接,我想存储锚文本(如果可用).我的数据库设置如下图所示.

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函数可以防止我复制数据,它们可以在我过去使用的其他模型中正常工作(虽然我愿意接受更好的方法来做这个,因为这会使用数据库调用每次检查).我也试过评论它们,它不会影响我的代码.我应该如何构建这个来妥善保存?

首先关于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');

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


如何选择合适的 C++ Web 开发框架?
利用 C++ 框架构建高并发 Web 应用的策略
用 C++ 框架开发跨平台图形应用程序
golang框架中安全编码实践的最佳指南是什么?
golang框架与其他语言框架在设计理念上的区别有哪些?
C++ 图形框架与其他语言框架的比较
C++ 框架与其他 Web 开发框架的对比分析
使用 C++ 框架构建大型项目最佳实践
C++ 框架如何提高大型项目开发效率
C++ 框架中依赖注入的持续集成与部署工具
如何与社区协作和贡献到自定义 Golang 框架?
C++ 框架在大型项目中如何实现模块化开发
使用 C++ 框架开发跨平台 Web 应用
C++ 框架在大型项目中的优缺点
golang框架在性能上的优势体现在哪些方面?
C++ 框架在嵌入式系统内存优化中的优势
golang框架在人工智能与机器学习中的作用
如何扩展 Golang 框架以支持特定功能?
如何利用 Go Modules 和依赖项管理来自定义 Golang 框架?
Golang 框架中的性能优化技巧