谁一开始就是大神?

关于联表查询/插入的问题[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里,加一个生成用户资料的方法:
然后在注册的model里加上

赞(0) 打赏
未经允许不得转载:菜鸟之家 » 关于联表查询/插入的问题[2.0]

评论 抢沙发

登录

找回密码

注册