问题描述
我试图显示“加入”结果,并且只希望对users表显示一次user_id,username,email,即使另一个表上有很多记录,所以我尝试使查询构建器像下方:
Table users | Table add_game
|
user_id | username | email | game_id | user_id | ign | acc_id
1 | userA | [email protected] | 1 | 1 | ignA | accA
2 | userB | [email protected] | 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();
}
解决方法
根据您的评论(图片),您的数组如下所示:
Array
(
[0]=>Array
(
[user_id]=>1,[user_name]=>'test',//etc.
)
)
您得到了
未定义索引:user_id
错误消息,因为在使用'user_id' => $user['user_id']
时错误地寻址了数组
正确的方法是添加要检索的索引,例如:
$this->setUserSession($user[0]); // where 0 can be changed to the index you pretend
现在数组已变平,'user_id' => $user['user_id']
不再抛出错误。