jayrui612 2017-06-20 16:56:52 331次浏览 1条评论 0 0 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 不知道为什么插入的数据库表截图看不到啊

  • 评论于 17小时前 举报

    我想把这种用 hasOne hasMany 在joinwith后 查询出来的结果直接生成在attributes中有没有什么办法

您需要登录后才可以评论。登录 | 立即注册
在线
221