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

  

原文地址:https://www.cnblogs.com/foreversun/p/6831760.html