2016-10-01 02:23:50 2717次浏览 1条回答 1 悬赏 10 金钱

我知道,在进行联表查询时,在控制器里要有$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?)
或者还有什么更好的思路?

最佳答案

  • xczizz 发布于 2016-10-01 10:02 举报

    你要知道$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 条回复
    回复于 2016-10-06 15:39 回复

    完美解决,感谢

    回复于 2016-10-06 16:18 回复

    $this->updateAll(['logintime'=>time()],'account=:account',[':account'=>$this->account]);
    

    经测试却不返回id,要想获得id一定要这样吗:

    $result=$this->find()->select(['id'])->where(['account'=>$this->account])->asArray()->one();
    $id=$result['id'];
    
    回复于 2016-10-08 11:28 回复

    你updateall之后返回的是bool类型吧,

    回复于 2016-10-10 20:20 回复

    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
lzw
主管

lzw 湖南

注册时间:2012-08-03
最后登录:2018-05-21
在线时长:9小时1分
  • 粉丝4
  • 金钱800
  • 威望10
  • 积分990

热门问题