网站首页
laravel--ORM--深入操作-多对多关联模型
发布时间:2016-07-14 07:42查看次数:3895
多对多关联模型
例如:一片文章可以有多个标签 A B C D E 标签
一个标签有可能多个文章都适用,这个时间我们就需要用一张新的表存储
假定表结构这样
article id name content tilel
tag id tag_content
简单我们的存储交叉表为
article_tag id article_id tag_id
那么机构就很清晰了

模型定义:
标签表tag
public function get_article(){
return $this->belongsToMany('App\Http\Model\Article',
'article_tags','tag_id','article_id');
对应的文章model 命名空间 ,交叉数据表 ,标签ID字段 ,文章ID字段
}
调用示例:
public function allToAll(){
//取标签ID为15的 所以对应文章
$data = Tag::find(15)->get_Article;
}
原生SQL:
select `articles`.*, `article_tags`.`tag_id` as `pivot_tag_id`, `article_tags`.
`article_id` as `pivot_article_id` from `articles` inner join `article_tags`
on `articles`.`id` = `article_tags`.`article_id` where `article_tags`.`tag_id` = '15'
文章表模型定义
//取文章标签?
public function get_tag(){
return $this->belongsToMany('App\Http\Model\Tag','article_tags','article_id','tag_id');
标签表命名空间 交叉表名称 当前表ID 标签表ID
}
调用示例:
public function allToAll(){
$data = Article::find(1)->get_tag;
return view('test');
}
原生SQL:
select `tags`.*, `article_tags`.`article_id` as `pivot_article_id`,
`article_tags`.`tag_id` as `pivot_tag_id` from `tags` inner join
`article_tags` on `tags`.`id` = `article_tags`.`tag_id` where
`article_tags`.`article_id` = '1'关键字词:多对多