Codeigniter 4未定义的索引:user_id

问题描述

我试图显示“加入”结果,并且只希望对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']不再抛出错误。