之前一直没有好的使用多对多例子,所以也一直没有总结,现在有一个好的例子,那就文章的标签与文章的关系,一篇文章可以有多个标签,一个标签也可以存在于多篇文章中,这是一个比较好的运用多对多的例子,
首先是数据库的设计,多对多需要一个中间数据库表来将两个表来联系起来。数据库设计如下:
pre_articles //文章表
id
……
pre_articles_tags // 文章与tag的表
id
article_id
tag_id
pre_tags //标签表
id
……
model类相关代码如下:
Model_article
/**
* 关联标签
*/
protected $_has_many = array(
'tags' => array(
'through' => 'articles_tags',
),
);
Model_tag
/**
* 关联文章
* @var unknown_type
*/
protected $_has_many = array(
'articles' => array(
'through' => 'articles_tags',
),
);
运用代码:
获取一篇文章的所有标签
$article_model->tags->find_all();
//删除文章的一个标签
$article_model->remove('tags', $tag_model);
添加一个文章的标签
// 直接添加对象
$article_model->add('tags', $tag_model);
// 直接指定要添加的对象的主键
$article_model->add('tags', 1);
标签的操作和上面的是一样的
上面的代码中 $article_model 和 $tag_model 指的都是一个model实例。