联系官方销售客服

1835022288

028-61286886

求助 版主:官方研发技术组
是不是在add()方法里直接操作数据入表?
类型:迅睿CMS 更新时间:2020-05-10 15:42:09

PHP程序里面

各位好,我正打算建一个数据应用的插件,是一种科研机构的特殊需求,目前思路有的,我已经应用于实际生产中了,只不过最近想转移到迅睿CMS上来。

目前遇到一个向数据表插入数据的问题。

我的子站数据表如下:

CREATE TABLE IF NOT EXISTS `{dbprefix}yth_app` (

  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT'自增ID',

  `name` varchar(255) NOT NULL COMMENT'应用名称',

  `description` text NOT NULL COMMENT'应用描述',

  `seo` json DEFAULT NULL COMMENT'SEO设置',

  `is_unified_user_groups` int(1) NOT NULL DEFAULT '0' COMMENT'是否限制用户组',

  `unified_user_groups` json DEFAULT NULL COMMENT'统一设置用户组',

  `is_unified_data_source` int(1) NOT NULL DEFAULT '0' COMMENT'是否限制数据源',

  `unified_data_source` json DEFAULT NULL COMMENT'统一设置数据源',

  `is_unified_limit_ip` int(1) NOT NULL DEFAULT '0' COMMENT'是否限制IP',

  `unified_limit_ip` json COMMENT'统一设置IP',

  `is_unified_data_filtering` int(1) NOT NULL DEFAULT '0' COMMENT'是否提取数据',

  `unified_data_filtering` json DEFAULT NULL COMMENT'统一数据提取',

   。。。。。

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='数据一体化应用表';


类似于数据源筛取规则,只能保存为json,每个应用都不一样的,这里不能存为固定字段。


我是新手,模仿api接口用的方法,

    public function add() {

   

        $this->_Post(0);

// print_r($tpl);exit;home_post.html

        \Phpcmf\Service::V()->assign('disabled', 0);

        \Phpcmf\Service::V()->display('yth_admin_add_app.html');

    }


结果在插入数据时报错了,还是数据插入到数据表的语句有问题。

现在SQL语句是:我通过mysql执行记录找到的

REPLACE INTO `dr_yth_app` (`name`, `description`, `seo`, `unified_user_groups`, `unified_data_source`, `unified_limit_ip`, `unified_template`, `unified_separate`, `unified_img_source`) VALUES ('一体化平台', '123', ('','',''), ('1','2','3','4'), ('','','',''), '{}', ('','',''), '', '{}')

现在这个语句是明显有问题的,

我提交的数据是:

Array ( [name] => 这是测试 [description] => 这是测试 [seo] => Array ( [seo_title] => [seo_keywords] => [seo_description] => ) [unified_user_groups] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 ) [unified_data_source] => Array ( [ip] => [acount] => [password] => [base] => ) [unified_limit_ip] => {} [unified_template] => Array ( [index] => [channel] => [content] => ) [unified_separate] => [unified_img_source] => {} )


因为才开始使用并琢磨迅睿cms,我对数据的sql形成过程一头雾水。

所以我在想办法解决这个问题,在这里请教一下。

  1. 数据表的字段结构好改的,这个按实际结果调整。

  2. 类似于seo字段,我提交的字段里是区分了3个 ( [seo_title] => [seo_keywords] => [seo_description] => ) 为什么插入时都没有对应关系了?

  3. 我现在是直接用的post(0),是不是向我这种自定义需求的,不能用post()这种方法,必须使用

 \Phpcmf\Service::M()->db->table(SITE_ID.'_census')->insert($arr[0]);

  这种形式?

4.作为一个自定义插件,我的数据插入只针对自己的表,是不是在add()方法里直接操作数据入表?


回帖
  • #1楼    迅睿框架创始人
    2020-05-10 12:10:38
    Chrome 0
    插入前,需要把数组的字段转换为字符串,才能入库dr_array2string函数
  • yudaliang82
    #2楼    yudaliang82
    2020-05-10 12:14:17
    Chrome 0
    创始人您好,请问要把post过来的数据进行格式化,比如dr_array2string,应该在哪里进行?也就是说,不能直接使用post()这个方法了,像是http.php那个用法list($tpl) = $this->_Post(0);我应该不可以直接修改table文件,那么是不是用钩子的写法?或者,我应该采放弃用$this->_Post(0);直接用数据表的写法?也就是
    \Phpcmf\Service::M()->db->table(SITE_ID.'_census')->insert($arr[0]);


    回复迅睿框架创始人
  • #3楼    迅睿框架创始人
    2020-05-10 12:15:46
    Chrome 0
    只能在入库前使用转换,否则入库会报错推荐使用这个文档参考文档:《Table操作类》
    满意答案
  • yudaliang82
    #4楼    yudaliang82
    2020-05-10 15:42:09
    Chrome 0
    迅睿框架创始人:非常感谢回复,我去仔细学习你给出的文档