详解 hasone ,hasmary,viatable三者教程 [ 2.0 版本 ]
废话不多说 直接上干货
假设现在有三张表
type 表
goods表
repair表
这三张表 都和type表中的type_id有关联
Hasone()
public function getType(){
return $this->hasOne(Dbtype::className(),['type_id'=>'goods_type']);
}
Goods表 中的goods_type 在 type表中是 一对一的关系
Goods表中有多个一样的goods_type 值
一个goods表中的goods_type 对应 一个type表中的type_id 这就是一对一
Hasmary()
public function getGoods(){
//一个type表中的id 在goods表中有多个数据,所以用hasmany
return $this->hasMany(DbGoods::className(),['goods_type'=>'type_id']);
在type 表中 type_id 是唯一的 他在goods表中有很多一样的值
一个type_id 对应多个goods_type 这就是一对多
Viatable 中间关联表
public function getGoods(){
//一个type表中的id 在goods表中有多个数据,所以用hasmany
return $this->hasMany(DbGoods::className(),['goods_id'=>'repair_goods_id'])
->viaTable('repair_goods',['repair_goods_type'=>'type_id']);
}
有type表 goods表 repair表
三表可以是 repair和其中两表都有关联
也可以 三表都有关联
Viatable中是 tpye表的type_id和 repair_goods表形成关联
而hasmary是 goods表的goods_id 和 repair_goods中的repair_goods_id形成关联
此时hasmary是与后表形成关联 而不是与前表形成关联了
ps 不知道为什么插入的数据库表截图看不到啊
jayrui612
注册时间:2017-03-24
最后登录:2019-05-27
在线时长:42小时30分
最后登录:2019-05-27
在线时长:42小时30分
- 粉丝12
- 金钱3845
- 威望170
- 积分5965
共 2 条评论
我想把这种用 hasOne hasMany 在joinwith后 查询出来的结果直接生成在attributes中有没有什么办法
看的人有点萌萌的