站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
▼
建站程序
开发
服务器
办公软件
开发教程
▼
服务器教程
软件使用教程
运营教程
热门电子书
▼
CSS教程
WordPress教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
热点词条
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
SpeedPHP/数据表一对一关联
”(章节)
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
==一对一关联== 首先看例子,我们先准备了两个数据表,分别是用户表及用户详细资料表,为了方便讲述,这里的数据表都是简化的。 ===user用户表=== *user_id int 用户ID 自增/主键 *user_name varchar(50) 用户名 唯一 *user_detail 用户详细资料表 *user_id int 用户ID 主键 *intro varchar(255) 用户个人介绍 一个用户记录对应着一个详细资料,因而这两个表是一对一的。正如前文所述,由于详细资料在逻辑上并非经常和用户表同时出现,所以我们将本来是相关的记录拆分成两个表来对待。(下面我们称user为本表,user_detail为对应表) 第二步,我们分别建立了这两个表的spModel继承类,[[代码]]如下,user.php: <pre><?php class user extends spModel { public $pk = 'user_id'; public $table = 'user'; // 由spModel的变量$linker来设置表间关联 var $linker = array( array( 'type' => 'hasone', // 关联类型,这里是一对一关联 'map' => 'detail', // 关联的标识 'mapkey' => 'user_id', // 本表与对应表关联的字段名 'fclass' => 'user_detail', // 对应表的类名 'fkey' => 'user_id', // 对应表中关联的字段名 'enabled' => true // 启用关联 ) ); } </pre> user_detail.php: <pre><?php class user_detail extends spModel { public $pk = 'user_id'; public $table = 'user_detail'; } </pre> 我们看到,作为主表的user类,它使用了$linker来设置关联信息(本章的最后将详细介绍$linker的每个设置的作用)。$linker是非常必要的,因为无论是作为模型类的变量出现,或者是在程序过程中动态地载入到spLinker中,都需要按照正确的格式去设置。 下面我们来介绍一对一关联的create,update,delete,find,findAll操作: ===CREATE=== 首先,一般而言如果我们调用了user类的create方法,将在user表中新增一条记录。不过现在我们希望通过使用了一对一的关联,同时地将记录新增到主表和对应表上: <pre>$newrow = array( 'user_name' => "灰太狼", 'detail' => array( // 请注意这里对应的就是$linker的'map' => 'detail',也就是关联的标识 'intro' => "草原上的王者" // 这里是增加到对应表上的数据 ), ); $userObj = spClass("user"); $userObj->spLinker()->create($newrow); // 和普通的create不同! </pre> 好了,看看两个[[数据]]表,数据已经如我们想象一样出现了: user表 1 灰太狼 user_detail表 1 草原上的王者 在使用spLinker过程中,需要注意的地方如上面注释的,一个是关联的标识的作用,另一个是spLinker()->形式的函数调用。 $userObj->spLinker()->create($newrow)这种形式的调用在sp框架内尤其是spModel的附属类内经常可以见到,这是一种提高代码写作效率和减少理解误差的好方法。它在spModel的意义就是附加的功能,比如$userObj->spPager()->findAll()就是在findAll上面附加了spPager分页的功能,本例中$userObj->spLinker()->create($newrow); 就是在create的时候加入了spLinker关联功能等等。建议大家能好好的熟悉这种写法,这将为我们的系统开发效率带来非常明显的改善。
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)