多对多组合算法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'

)

);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值