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

  • 评论于 2017-07-21 13:16 举报

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

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