Ecstore中定义了dbschema后如果想更改schema如何做呢

2016-06-06 17:38:00
hainuo
原创 727
摘要:Ecstore中定义了dbschema后如果想更改schema如何做呢
熟读代码300万行 然后其义自现。 将商派的ecstore代码 翻来覆去的var_dump 一天后终于找到如何修改dbschema了。 `/ecstore/app/base/lib/setting.php` 核心问题在这里 67-83行 ``` public function get_conf($key){ if(!isset($this->__app_conf[$key])){ $val = syscache::instance('setting')->get('setting/'.$this->app->app_id.'-'.$key); $app_setting = $this->source(); if($val === null){ if(!is_null($app_setting) && isset($app_setting[$key]['default'])){ $val = $app_setting[$key]['default']; //$this->set_conf($key, $val); }else{ return null; } } $this->__app_conf[$key] = $val; } return $this->__app_conf[$key]; } ``` 看这里就明白了 有一个缓存啊 所以简单办法清楚缓存就好了。 但是 你要再看一下 下面的`set_conf()` 看看都干了啥 ``` public function set_conf($key, $value){ $filter = array('app'=>$this->app->app_id, 'key'=>$key); $data = array('app'=>$this->app->app_id, 'key'=>$key, 'value'=>serialize($value)); $row = app::get('base')->model('setting')->getRow('1', $filter); if ($row) { $return = app::get('base')->model('setting')->update($data, array('key' => $key, 'app' => $this->app->app_id)); } else { $return = app::get('base')->model('setting')->insert($data); } $this->__app_conf[$key] = $value; return (bool)$return; } ``` 所以我们看出来了 还需要处理下数据库 base_setting。 以 members的dbschema 将`固定电话`的`固定`改为`联系` 修改哪里呢? 文件1 `ecstore/custom/b2c/model/member/attr.php ` 文件2 `/Users/fengliu/pingangwang/ecstore/custom/b2c/dbschema/members.php` 改完后要修改数据库如何修改 可以看到需要修改的内容为`member.attr`,这个跟踪下代码就可以得到。 `/Users/fengliu/pingangwang/ecstore/custom/b2c/model/member/attr.php` 这个model中可以很轻松的看到要获取的`conf`的key为`member.attr` 然后再去看上面的set_conf 可以看到在数据库存储的数据`app=b2c key=member.attr` 建议先备份该条语句 ,然后删除这条语句 删除后还要进行下一步操作 删除缓存 我的ecstore使用的是`filesystem`类来处理文件缓存 我们来看看这个类,文件为 `ecstore/app/base/lib/syscache/adapter/filesystem.php` 这里可以得到缓存文件的位置 ,然后将缓存文件删除 就ok了。 希望给大家带来帮助 ps 有人跟我说 使用cmd工具 执行update可以更新 已经在本地试过 不起作用,大家可以先用这个工具试试 ,不行再按照我的方式来做