Codeigniter 4查询构建器联接仅从第一个表显示1次

问题描述

我已经完成了使用联接的查询生成器。我想根据表1上的用户ID显示表2、3、4、5、6等。我试图查询结果,它显示如下:

enter image description here

我的桌子

Table users

user_id | username | email          
1       | userA    | userA@email.com
2       | userB    | userB@gmail.com
                                                         
Table add_game
game_id | user_id | ign    | acc_id
1       | 1       | ignA   | accA
2       | 1       | ignB   | accB
1       | 2       | ignB   | accB
3       | 2       | ignD   | accD 

我将使用foreach循环,并且我相信它将基于数据库中的记录多次显示。如果我只想显示红色框(来自用户表)中突出显示的信息以及与add_game表中与用户ID相关联的所有记录仅1次,该怎么办?

这是我当前的代码:

控制器

public function login()
    {

        $data = [];
        helper(['form']);
        
        $validation =  \Config\Services::validation();

        $db = db_connect();
        $model = new LoginModel($db);
        $user = $model->login($this->request->getVar('userlogin'));

        $this->setUserSession($user[0]);
        
            echo view('templates/header',$data,$user);
            echo view('account/login',$user);
            echo view('templates/footer',$user);
        
        
    }


    private function setUserSession($user){
        $data = [
            'user_id' => $user['user_id'],'username' => $user['username'],'email' => $user['email'],'firstname' => $user['firstname'],'lastname' => $user['lastname'],'dob' => $user['dob'],'country' => $user['country'],'country_code' => $user['c_code'],'contact' => $user['contact'],'game_id' => $user['game_id'],'ign' => $user['ign'],'acc_id' => $user['acc_id'],'isLoggedIn' => true
        ];
        
        session()->set($data);
        return true;
    }

型号:

return $this->db->table('users')
                        ->groupStart()
                            ->where('username',$str)
                            ->orWhere('email',$str)
                        ->groupEnd()
                        ->join('add_game','add_game.user_id = users.user_id')
                        ->get()
                        ->getResultArray();

我还有几张桌子,但是现在还没有创建,所以我暂时只加入了一张桌子。我想念什么?还是我必须循环两次?有没有一种方法我只需要循环1次?希望有人可以在这里帮助我。预先感谢大家!

解决方法

实现此目的最简单的方法(显示add_game表中的2条记录和users表中的1条记录)需要在视图中创建一个foreach循环,并排除要显示的users表中重复的数据。

控制器:

$data['my_data']=$this->Your_model->your_method(); // your query example
$this->load->view('your_view',$data)

视图:

<?php $my_id=0;foreach($my_data as $row):?>
   <?php if($my_id!=$row->user_id):?>
     <div><?=$row->username?></div>   <!--data from table user-->
     <div><?=$row->created_at?></div> <!--data from table add_game-->
   <?php else:?>
     <div><?=$row->created_at?></div> <!--only data from table add_game-->
   <?php endif;?>
<?php $my_id=$row->user_id;endforeach;?>

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...