Codeigniter 4 정의되지 않은 인덱스 : user_id

Aug 16 2020

"join"결과를 표시하려고하는데 다른 테이블에 레코드가 많은 경우에도 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();
    }

이 오류를 해결하는 방법은 무엇입니까?

답변

1 Vickel Aug 16 2020 at 17:50

귀하의 의견 (이미지)에서와 같이 배열은 다음과 같습니다.

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']더 이상 오류가 발생하지 않습니다.