Yii表关联

主要为了理清一下思路

首先创建表

  1. alter table sw_xiaodi constraint d_x foreign key(`dage_id`) references `sw_dage`(`id`) #设置外键 也可以在创建表的时候给定
    
    CREATE TABLE `dage` (
       `id` int(11) NOT NULL auto_increment,
       `name` varchar(32) default '',
       PRIMARY KEY  (`id`)
     ) ENGINE=InnoDB DEFAULT CHARSET=latin1
     
     CREATE TABLE `xiaodi` (
       `id` int(11) NOT NULL auto_increment,
       `dage_id` int(11) default NULL,
      `name` varchar(32) default '',
      PRIMARY KEY  (`id`),
      KEY `dage_id` (`dage_id`),
      CONSTRAINT `xiaodi_ibfk_1` FOREIGN KEY (`dage_id`) REFERENCES `dage` (`id`) #创建表的时候给定外键;dage_id是xiaodi的外键,外键对应的键必须是主键
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 

    有一点疑问,发现Yii的表关联做不做外键都能得到最终想要的结果,测试了下只要配置对就OK;目前没发现有什么不足;不过最好还是设置一下为好
  2. 创建对应的model Dage.php与Xiaodi.php
  3. 配置relations:
    //relations的结构如下:
    'VarName'=>array('RelationType', 'ClassName', 'ForeignKey', ...additional options)
    //'varName'这个可以自由定义的,随意给定,但为了一目了然 一般都是给定对应的表名
    //RelationType 四中类型,不多说
    //ClassName 关联model名
    //ForeignKey 外键
    //options 包含的内容就多了 with、on、select等
    //Dage.php
    'xiaodis'=>array(self::HAS_MANY, 'Xiaodi','dage_id'),
    //Xiaodi.php
    'dage'=>array(self::BELONGS_TO, 'Dage','dage_id'),

  4. 配置完成之后,下面就是数据的获取了随便创建一个controller
    public function actionIndex () {
            $dage_model = Dage::model();
    		$all = $dage_model->findAll();
    		foreach($all as $k=>$v){
    			print_r($v);//大哥的信息
                            print_r($v->xiaodis)//大哥对应的小弟信息
    		}
        }
    根据小弟获取大哥的信息同上;
    public function actionIndex () {
            $xiaodi_model = Xiaodi::model();
    		$all = $xiaodi_model->findAll();
    		foreach($all as $k=>$v){
                           print_r($v);//小弟的信息
    			print_r($v->dage);//小弟对应的大哥信息
    		}
        }

  5. 查看好多人讲配置的关系是互配的,刚测试了一下,假如我只需要查大哥还有他下面的小弟信息;而不需要去查小弟 以及相对应的大哥信息,那么在Xiaodi.php中不需要再做映射,获得信息时一样的,不知道会不会在某些其他方面有影响;再研究吧;
  6. 才疏学浅 有错的地方 多请指教

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值