class Article extends Model
{
public function tags() {
// 用户HAS ONE档案关联 u_id附表中的ID id主表中的ID
return $this->hasMany('tags','u_id','id');
}
public function tag() {
return $this->belongsToMany('tag', 'tags','tag_id','u_id');
}
}
//Article 是数据库中的表名(不包含前缀)
hasMay()两个表之间的关联 tags 模型名称 u_id关联的外键 ID关联的主键
belongsToMang()三个表的关联 'tag' 模型名称 tags中间表名(老版本这个需要表名的全写)
tag_id 关联外键 u_id关联模型关联键
在控制器中使用
首先引入引命名空间use app\index\model\Article;
$res=Article::with('tag')->where('id','neq','1')->field('title,id')->find()->toArray();
这样查询出来的数据是一个对象的集合 可以通过toArray();把对象转换成数组
如果使用select();查询的话查询出来的将是一个数组里面包含了N个对象;这时候不能直接转换数组
暂时只能把数组遍历;然后把每个模型对象转换成数组$res=Article::with('tag')->select();
foreach ($res as $vo){
$array[]=$vo->toarray();
}
with()//关联方法名
后面可以使用所有的链式操作
//这个是word表关联自己本身进行查询的class Word extends Model
{
public function word() {
return $this->hasMany('word','u_id','id');
}
mysql语句查询$mysql="SELECT * ,GROUP_CONCAT(c.name) FROM ykj_article AS a LEFT JOIN ykj_tags AS b ON b.`u_id`=a.`id` JOIN ykj_tag AS c ON b.`tag_id` = c.`id` ";
tp db 查询$data=db('article')->where('a.id','eq','10')->alias('a')->join('ykj_tags b',['b.u_id=a.id'],'LEFT')->join('ykj_tag c',['c.id=b.tag_id'],'LEFT')->select();