蛋疼的_after_insert

     
  之前做的一个素材类的网站,用的是TP3.2,在发布话题功能的维护测试时,发现了一个问题,我在添加话题的时候在模型里写了个钩子函数_after_insert(),希望在新增话题数据之后同时将话题的id和类型属性的id绑定到一起,代码如下:

    public function _after_insert($data,$option){
        $articleAttr = D('article_attr');
        $id = $data['id'];
        $atrAttr=I('post.attr_id');
        if($atrAttr){
            foreach($atrAttr as $k=>$v){
                foreach($v as $k1=>$v1){
                    $articleAttr->add([
                        'artid'=>$id,
                        'attrs_id'=>$k,
                        'attrs_value'=>$v1
                    ]);
                }
            }
        }
    }

  写完之后发现可以用,不过在我往下面继续开发的时候突然惊喜的发现之前写的钩子函数不起作用了,这让我十分苦恼,认为是我在完成那个功能之后修改了其他地方导致这个功能出现问题,于是我开始调试,调试的结果是新增数据根本都不会经过该函数,更奇怪的是,当我把这个函数改成另一个,_before_insert()的时候,却发现新增数据的时候又通过这个函数了,实在是匪夷所思,折腾了两天也没有结果,让我不得不怀疑是不是我把配置文件给搞坏了。

  经过多次测试,以及查阅了网上众多资料,还是没能发现错误在哪里,只能另寻出路,在新增这条文章数据的时候获取到这条数据的id,再根据id对类型属性进行新增,我知道这种方法有不科学的地方,不过暂时我也只想到了这种方法,  希望各路大神帮忙指正。

原文地址:https://www.cnblogs.com/zlnevsto/p/8361711.html