• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Mark的小试牛刀

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

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'));

  

 

posted on 2017-05-09 17:41  我是天才啊  阅读(236)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3