• PHPActiveRecord 学习二


    ORM关联查询

     a.一对多
      针对外键来说 谁属于谁 谁有谁

        user表 
    		CREATE TABLE `user` (
    		  `uid` int(11) NOT NULL AUTO_INCREMENT,
    		  `name` varchar(30) DEFAULT NULL,
    		  `state` tinyint(1) DEFAULT '0',
    		  PRIMARY KEY (`uid`)
    		) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8
    
    	article表
    		CREATE TABLE `article` (
    		  `article_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    		  `uid` int(11) NOT NULL,
    		  `comment` varchar(400) CHARACTER SET latin1 DEFAULT NULL,
    		  PRIMARY KEY (`article_id`),
    		  KEY `uid` (`uid`)
    		) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8
    

      #user表 与 article 表为一对多关系 需要在模型中建立映射模型

      

                  article的Model层:
    		//article表外键uid属于user表的主键  -谁属于谁
    			static $belongs_to = array(array('user')); 
    
    		user的Model层:
    		//user表有个article的外键uid  谁有谁
    			static $has_one = array(array('article','foreign_key'=>'uid'));        
    

      ##查询user表主键为1-5的集合 同时查询出 user 所对应的文章内容

        

    $users = User::find_by_sql('select * from `user` inner join `article` on(`user`.uid=`article`.uid)   where `user`.uid in(12,13,15,16,18)');
    
    foreach($users as $user)
    {
    	echo '序号:'.$user->uid.'  姓名:'.$user->name.' 文章内容:'.$user->article->comment.' <br />'; 
    }
    

      

    #关联查询的一些小问题

    ##有些问题 的代码

      $users = User::all();
      foreach($users as $user)
      {
        echo '姓名:'.$user->name.' 状态:'.$user->state.' 文章:'.$user->article->comment.'<br />';
      }

    然后直接遍历 遍历时关联ORM模型 article
    这时候发现 出来的数据不完整 关联表article中同一外键的多条记录只显示一条

    查了很多资料没出来
    就想着用下join吧 用join查询的话 这时候数据就完整了

    $users = User::all(
      array('joins' => array('article'))
    );
    

      #关联插入

    $user = User::create(array('name' => 'goto', 'state' => 1));
    
    $user->create_article(array('comment'=>'m a dog'));
    

      

  • 相关阅读:
    mysql字符集和数据库引擎修改方法
    android 之GridView和ImageView教程
    把php代码保存到php文件实现方法
    extjs gridpanel 操作行 得到选中行的列
    SQL 分页
    vs 调试 慢 解决办法
    JS获取屏幕高度
    C#事件以及委托
    ExtJs 3.0 不兼容 IE9
    ASP.NET 获取客户端IP (无视代理)
  • 原文地址:https://www.cnblogs.com/foreversun/p/6831760.html
Copyright © 2020-2023  润新知