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