关于联表查询/插入的问题 [ 2.0 版本 ]
我知道,在进行联表查询时,在控制器里要有$model=User::find()->joinWith('userinfo');
如下:
//后台显示注册会员列表
public function actionList(){
$model=User::find()->joinWith('userinfo');
$count=$model->count();
$pageSize=\Yii::$app->params['pageSize']['user'];
$pager=new Pagination(['totalCount'=>$count,'pageSize'=>$pageSize]);
$users=$model->offset($pager->offset)->limit($pager->limit)->all();
return $this->render('list',['users'=>$users,'pager'=>$pager]);
}
同时在model-User里要加上:
public function getUserinfo(){
return $this->hasOne(UserInfo::className(),['userid'=>'id']);
}
在视图里显示的时候要在关联的表字段加上...->userinfo->...
如下:
<?php foreach($users as $users): ?>
<tr>
<td class="center"><?php echo $users->id;?></td>
<td class="center"><?php echo $users->userinfo->loginip;?></td>
......
</tr>
<?php endforeach;?>
但在注册的时候,如何在插入数据到user表的同时(或者之后),插入数据到userinfo表?
我现在的思路是:1.先插入user表,再用该插入进数据表user后对应的id来插入到userinfo表(但是这样可能插入不同步造成会员列表页报错,因为会员列表页有$users->userinfo->loginip,而这个又得和user表一一对应)?2.在插入user表的同时插入userinfo表(也就是用事务),但是这有个问题:怎么获取插入user表的数据的自增主键id?(因为事务是同时执行的,也就是user表都没插入呢,怎么知道User的Id?)
或者还有什么更好的思路?
最佳答案
-
你要知道
$model->save()
成功之后返回的就是主键ID。这儿事务的同时
指的是大家一起成功或者一起失败,如果info保存失败,那么user->save()
也会失败,所以不要担心获取不到id。
所以,你可以在userinfo的model里,加一个生成用户资料的方法:public static function generateInfo($user_id,$ip='') { $info = new UserInfo(); $info -> user_id = $user_id; $info -> loginip = $ip; return $profile -> save(); }
然后在注册的model里加上
if($this->save()){ //这儿,保存成功之后返回的就是你要的用户ID UserInfo::generateInfo($this->id,$ip) }
共 4 条回复
其他 0 个回答
没有找到数据。
lzw 湖南
注册时间:2012-08-03
最后登录:2018-05-21
在线时长:9小时1分
最后登录:2018-05-21
在线时长:9小时1分
- 粉丝4
- 金钱800
- 威望10
- 积分990