站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
SpeedPHP/数据表多对多关联
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
{{SpeedPHP top}} spLinker多对多关联是很容易理解的,以下我们举个例子来说明spLinker的多对多关联的用法。 ==数据表多对多关联== 下载Linker多对多关联的例子:http://speedphp.com/cms/uploads/farm-splinker.rar。 请注意要先在数据库内导入例子中的[[SQL]]文件,这样更有利于理解多对多例子。最近喜羊羊的村落也非常喜欢种菜(QQ农场)了,所以全部的人(羊?)都种了不少的菜,而且各人种的种类也不尽相同。据我们的调查,他们所种的菜是以下关系: [[Image:Speedphp linkerfarmers.jpg]] 让我们从[[编程]]的角度来看,不同的羊种了不同的菜,同时也可以说不同的菜被不同的羊种了,这就是多对多的关系。 下面我们使用程序来描述他们之间的关系,在user的[[数据]]类中,定义和fruit表的多对多关系,定义后的farm_user.php如下: <pre><?php class farm_user extends spModel { public $pk = 'uid'; public $table = 'user'; var $linker = array( array( 'type' => 'manytomany', // 多对多关联 'map' => 'farms', // 关联的标识 'midclass' => 'farm_user2fruit', // 关联的中间表 'mapkey' => 'uid', // 关联的字段 'fclass' => 'farm_fruit', // 对应表的数据类 'fkey' => 'fruitid', // 对应表的关联字段 'enabled' => true ), ); } </pre> 这里要注意和一对多区别的除了type之外,多对多关联还有了midclass,midclass是一个数据库类,对应了一个存储着多对多两表之间的关系。我们可以看看本例中的midclass: farm_user2fruit.php: <pre><?php class farm_user2fruit extends spModel { public $pk = 'uid'; public $table = 'user2fruit'; } </pre> 数据表内容如下: <pre>CREATE TABLE `farm_user2fruit` ( `uid` int(11) NOT NULL, `fruitid` int(11) DEFAULT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1; </pre> 只有farm_user表的主键uid和farm_fruit表的主键fruitid,而这个表正是表达了farm_user表和farm_fruit表的对应关系。 好了,在配置好了farm_user类之后,我们可以试试查询一下了,在main.php中直接搜索farm_user类: <pre>$results = spClass("farm_user")->spLinker()->findAll(); dump($results); </pre> 我们看到的输出是: <pre>Array ( [0] => Array ( [uid] => 1 [username] => 灰太狼 [farms] => ) [1] => Array ( [uid] => 2 [username] => 喜羊羊 [farms] => Array ( [0] => Array ( [fruitid] => 1 [fruitname] => 南瓜 ) [1] => Array ( [fruitid] => 3 [fruitname] => 玫瑰 ) [2] => Array ( [fruitid] => 4 [fruitname] => 青草 ) ) ) [2] => Array ( [uid] => 3 [username] => 羊村长 [farms] => ) [3] => Array ( [uid] => 4 [username] => 懒羊羊 [farms] => Array ( [0] => Array ( [fruitid] => 1 [fruitname] => 南瓜 ) [1] => Array ( [fruitid] => 2 [fruitname] => 西瓜 ) ) ) [4] => Array ( [uid] => 5 [username] => 暖羊羊 [farms] => Array ( [0] => Array ( [fruitid] => 4 [fruitname] => 青草 ) [1] => Array ( [fruitid] => 6 [fruitname] => 圣诞树 ) [2] => Array ( [fruitid] => 7 [fruitname] => 葡萄 ) ) ) ) </pre> 这里可以看出,正如我们期待的那样,每条搜索到的记录都带上了他们关联的内容。 另外,如果我们只要查询关联记录的总记录数是多少,而不需要返回记录,要怎么做呢? 只要在$linker内设置一下就行('countonly' => true)。如: <pre><?php class farm_user extends spModel { public $pk = 'uid'; public $table = 'user'; var $linker = array( array( 'type' => 'manytomany', // 多对多关联 'map' => 'farms', // 关联的标识 'midclass' => 'farm_user2fruit', // 关联的中间表 'mapkey' => 'uid', // 关联的字段 'fclass' => 'farm_fruit', // 对应表的数据类 'fkey' => 'fruitid', // 对应表的关联字段 'enabled' => true 'countonly' => true // 只计算关联记录总数 ), ); } </pre> 加上了'countonly' => true,返回的将不再是关联表的记录,而是一个数字,代表着关联有多少条件记录。 同时,'countonly' => true,在一对多关联中也有同样的作用。 ==参考来源== http://speedphp.com/manual.html {{SpeedPHP}} [[category:SpeedPHP|S]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
模板:SpeedPHP
(
编辑
)
模板:SpeedPHP top
(
编辑
)