【发布时间】:2020-12-05 19:16:30
【问题描述】:
我正在尝试显示“加入”结果,并且只想为 users 表显示 user_id、username、email 一次,即使另一个表上有很多记录,所以我尝试制作一个查询构建器,例如下面:
Table users | Table add_game
|
user_id | username | email | game_id | user_id | ign | acc_id
1 | userA | userA@email.com | 1 | 1 | ignA | accA
2 | userB | userB@gmail.com | 2 | 1 | ignB | accB
| 1 | 2 | ignB | accB
| 3 | 2 | ignD | accD
型号:
<?php namespace App\Models;
use CodeIgniter\Database\ConnectionInterface;
class LoginModel{
protected $db;
public function __construct(ConnectionInterface &$db){
$this->db =& $db;
}
public function login(string $str)
{
return $this->db->table('users')
->groupStart()
->where('username', $str)
->orWhere('email', $str)
->groupEnd()
->join('add_game', 'add_game.user_id = users.user_id')
//->distinct('users.user_id')
//->select(("GROUP_CONCAT(game_id, ign, acc_id) AS userdata"))
->get()
->getResultArray();
}
}
控制器:
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);
echo view('templates/header', $data);
echo view('account/login', $data);
echo view('templates/footer', $data);
}
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;
}
但现在我得到了
未定义索引:user_id
错误信息。以前,当我在没有查询生成器的情况下使用登录时没有问题或错误:
public function login(string $str, string $fields, array $data)
{
return $this->where('username', $data['userlogin'])->orWhere('email', $data['userlogin'])
->first();
}
如何解决这个错误?
【问题讨论】:
-
但是表 add_game 没有 user_id 列?至少不在您的代码示例中
-
@Vickel 感谢您的帮助!是的,我的 add_game 表中有一个 user_id 列。我展示的示例是结果显示。我已经更新了图表。我不确定我的查询生成器有问题还是什么。
-
echo '<pre>';print_r($user);die;吐出什么? -
@Vickel Here : imgur.com/a/olgG8lm 我试图为红色突出显示的框显示一次i.stack.imgur.com/sUW0M.jpg 所以我想将数组传递到会话中并尝试循环 2 次以实现我想要的但事实证明它给了我 Undefined index: user_id 错误。
-
使用
$this->setUserSession($user[0]);
标签: query-builder codeigniter-4