我知道,在进行联表查询时,在控制器里要有$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里,加一个生成用户资料的方法:
然后在注册的model里加上