php – 如何建模多对多的关系?
发布时间:2020-12-13 21:59:50 所属栏目:PHP教程 来源:网络整理
导读:由于只有一些以前的数据库经验,并且没有正式的教育,我对如何建模(以及在 PHP中检索我需要的数据)感到有些困惑.这就是我想要建模的: 对于我网站上的每个项目,允许有多个标签,如文件,上传,php,递归等.但是标签是可重复使用的,我可以有两个不同的项目,每个都可
由于只有一些以前的数据库经验,并且没有正式的教育,我对如何建模(以及在
PHP中检索我需要的数据)感到有些困惑.这就是我想要建模的:
对于我网站上的每个项目,允许有多个标签,如文件,上传,php,递归等.但是标签是可重复使用的,我可以有两个不同的项目,每个都可以有php标签. 我一直在努力阅读如何做到这一点,以及缺乏经验或其他我不知道的事情,但我似乎无法理解这个概念.显然你需要一个将两者连接在一起的中间表? 一旦我有了这种关系并定义了表格,我将如何做以下事情: 感谢您的帮助,如果有人可以列出任何进一步的阅读,以加强我对这个概念的理解,这将是伟大的. 解决方法
数据库部分很简单.这只是一个示例,因此您可以看到db的外观,而不是任何特定的SQL引擎查询.
CREATE TABLE posts ( id INT PRIMARY KEY,subject VARCHAR(100),body TEXT ) CREATE TABLE tags ( id INT PRIMARY KEY,name VARCHAR(50) ) CREATE TABLE post_tags ( post_id INT,tag_id INT,FOREIGN KEY (post_id) REFERENCES posts (id),FOREIGN KEY (tag_id) REFERENCES posts (id) ) 要使用yourTag标记获取项目,您只需运行此类查询 SELECT P.* FROM posts P LEFT JOIN post_tags PT ON (PT.post_id = P.id) LEFT JOIN tags T ON (T.id = PT.tag_id) WHERE T.name = 'yourTag'; 要获取与id为123的帖子相关联的标记,请运行此查询: SELECT T.* FROM tags T LEFT JOIN post_tags PT ON (T.id = PT.tag_id) LEFT JOIN posts P ON (PT.post_id = P.id) WHERE P.id = 123; 对于PHP部分,您可以使用框架.许多(如果不是全部)框架可以轻松地模拟这种关系.例如在CakePHP中这样做: class Post extends AppModel { $useTable = 'posts'; $hasAndBelongsToMany = array( 'Tag' => array( 'className' => 'Tag' 'joinTable' => 'post_tags' 'foreignKey' => 'post_id' 'associationForeignKey' => 'tag_id' ) ); } class Tag extends AppModel { $useTable = 'tags'; $hasAndBelongsToMany = array( 'Post' => array( 'className' => 'Post' 'joinTable' => 'post_tags' 'foreignKey' => 'tag_id' 'associationForeignKey' => 'post_id' ) ); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |