Codeigniter 4 query builder join 从第一次开始只显示 1 次 table
Codeigniter 4 query builder join display only 1 time from first table
我已经使用连接完成了一个查询生成器。我想根据 table 1 上的用户 ID 显示 table 2、3、4、5、6 等。我尝试查询结果,它显示如下:
我的表格
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 循环,我相信它会根据数据库中的记录显示多次。如果我只想显示1次红框中高亮显示的信息(来自用户table)和add_game table中用户id关联的所有记录怎么办?
这是我当前的代码:
控制器
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', $data, $user);
echo view('templates/footer', $data, $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();
我还有几个table但暂时还没有创建所以我暂时只加入了1个table。我错过了什么?还是我必须循环两次?有没有一种方法我只需要循环一次?希望有人能在这里帮助我。提前谢谢大家!
实现这一点的最简单方法(显示来自 add_game table 的 2 条记录和来自用户 table 的 1 条记录)您需要在视图中创建一个 foreach 循环,并排除显示来自用户 table 的重复数据。
控制器:
$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;?>
我已经使用连接完成了一个查询生成器。我想根据 table 1 上的用户 ID 显示 table 2、3、4、5、6 等。我尝试查询结果,它显示如下:
我的表格
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 循环,我相信它会根据数据库中的记录显示多次。如果我只想显示1次红框中高亮显示的信息(来自用户table)和add_game table中用户id关联的所有记录怎么办?
这是我当前的代码:
控制器
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', $data, $user);
echo view('templates/footer', $data, $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();
我还有几个table但暂时还没有创建所以我暂时只加入了1个table。我错过了什么?还是我必须循环两次?有没有一种方法我只需要循环一次?希望有人能在这里帮助我。提前谢谢大家!
实现这一点的最简单方法(显示来自 add_game table 的 2 条记录和来自用户 table 的 1 条记录)您需要在视图中创建一个 foreach 循环,并排除显示来自用户 table 的重复数据。
控制器:
$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;?>