SpeedPHP/数据表一对多关联
SpeedPHP | 快速入门 | 访问交互 | 数据操作 | 框架概述 | 模板引擎 | 优化加速 | 开发指南 | 数据模型 | API参考 |
一对多关联[ ]
首先我们的例子是一个留言本程序,一个用户可以发布多条留言信息,而每条留言信息只能由一个用户来发布。
那么,我们有如下两个表:
- user 用户表
- user_id int 用户ID 自增/主键
- user_name varchar(50) 用户名 唯一
- guestbook 留言表
- gb_id int 留言ID 自增/主键
- contents varchar(255) 留言内容
- user_id int 对应的用户ID
然后我们建立了两个表的对应spModel继承类,主表仍然是用户表,而对应表则是留言表。
请注意主表的$linker的设置,user.php:
< ?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' => false ), array( 'type' => 'hasmany', // 一对多关联 'map' => 'guestbook', // 关联的标识 'mapkey' => 'user_id', 'fclass' => 'guestbook', 'fkey' => 'user_id', 'enabled' => true ), ); }
guestbook.php:
< ?php class guestbook extends spModel { public $pk = "gb_id"; public $table = "guestbook"; }
我们可以看到,$linker的配置多了一个hasmany类型的关联,这正是对留言表的关联。除了类型,关联标识和对应类名不同外,其他的设置基本与一对一关联相同。
一对多关联的操作[ ]
CREATE[ ]
新增记录,与一对一关联稍微有些不同的是,一对多的CREATE支持在主表增加记录外,还支持同时向对应表增加一条或多条相应的记录。 例如:
$newrow = array( 'user_name' => '羊村长', // 增加到主表的记录数据 'guestbook' => array( // 增加到对应表的记录数据 array('contents'=>'大家好我是村长'), // 对应第一条记录 array('contents'=>'下面我来说两句'), // 对应第二条记录 array('contents'=>'以下省略一万五千字'), // 对应第三条记录 ), ); $userObj = spClass("user"); $userObj->spLinker()->create($newrow);
执行程序后,我们来看看数据表:
user表
1 灰太狼
2 小羊羊
3 羊村长
guestbook表
1 大家好我是村长 3
2 下面我来说两句 3
3 以下省略一万五千字 3
我们可以看到,对应已经新增了三条对应的记录。
同时,如果只需要对应表中增加一条记录,也可以直接使用:
$newrow = array( 'user_name' => '羊村长', // 增加到主表的记录数据 'guestbook' => array( 'contents'=>'大家好我是村长', ), );
这个用法和一对一关联的CREATE是一样的。在一对多关联中,UPDATE和DELETE这两个操作和一对一关联时也是相同。
同样的,find和findAll在一对多关联也是和一对一关联相同的,例子中我们使用findAll来进行示范:
$userObj = spClass("user"); $result = $userObj->spLinker()->findAll(); // 和上例一样的查找 dump($result);
结果:
Array ( [0] => Array ( [user_id] => 12 [user_name] => 灰太狼 [guestbook] => ) [1] => Array ( [user_id] => 14 [user_name] => 小羊羊 [guestbook] => ) [2] => Array ( [user_id] => 16 [user_name] => 羊村长 [guestbook] => Array ( [0] => Array ( [gb_id] => 55 [contents] => 大家好我是村长 [user_id] => 16 ) [1] => Array ( [gb_id] => 56 [contents] => 下面我来说两句 [user_id] => 16 ) [2] => Array ( [gb_id] => 57 [contents] => 以下省略一万五千字 [user_id] => 16 ) ) ) )
参考来源[ ]
http://speedphp.com/manual.html
SpeedPHP使用手册导航 | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|