#1 passionxlife
我们都知道,平时操作MYSQL的SQL语句时,如果需要跨库进行操作数据,只需要进行 “ 库名.表名” 这样子就可以了。今天用SP做到数据库这一步,发现卡壳了。
情况是这样子的,我有N个库(N>5),其中 A库为主库,大部分的表都在此库中。而B、C、D、E等库则是我无法进行变更的库,必须按照现有库名和结构进行操作。
现在我有一条操作指令集合,首先需要在主库A的表a1中插入一系列数据,然后在向B库插入一系列数据,然后在向C库插入一系列数据,我首先新建了一个 aModel.php 数据模型,设置 $pk='id'; $table='A';然后我在建立其他模型的时候不知道应该如何建立了,因为,没有设置库名的一项。那么不管我填什么表名,都是在默认的A库下操作。
我参考了以下手册中的相关解释,发现要用很多代码来定义。着实感觉麻烦。
能不能在 spModel中增加 public $libname;用来表示当前数据模型操作的是哪个库,如果为null则操作默认库。
希望Jake大能在百忙之中解答一下我的疑惑,不胜感激。
2012-12-18 22:41:20
#2 jake
稍微转变一下思路就行。
$table='库名.表名';
由于table是一个成员变量,所以可以动态修改。
$a = spClass("aModel");
$a->table = "B.Table";
$a->findxxxx
$a->table = "C.Table";
$a->findxxxx
PS: 一般做项目,绝少用多库(读写分离除外 ),多库一般是设计有问题。稍大项目都会要求提供接口进行数据访问。
2012-12-18 23:16:32
#3 passionxlife
jake 发表于 2012-12-18 23:16
稍微转变一下思路就行。
$table='库名.表名';
多谢jake大解惑,方法着实行之有效。又学了一招{:soso_e104:}
话说我这套系统是韩国棒子做的 - - 一共有8个库,一个功能对应了一个库,悲催。。。
2012-12-19 12:47:20
#5 passionxlife
jake 发表于 2012-12-18 23:16
稍微转变一下思路就行。
$table='库名.表名';
我仔细看了一遍spModel的源码,不知道这样写B库的表模型可不可以?
2012-12-19 14:14:03
#6 jake
你试试就知道了,应该可以。主要是改tbl_name,而不是改table变量
2012-12-19 14:22:29