Codeigniter 4 Chỉ mục không xác định: user_id

Aug 16 2020

Tôi đang cố gắng hiển thị kết quả "tham gia" và chỉ muốn hiển thị user_id, tên người dùng, email chỉ một lần cho bảng người dùng ngay cả khi có nhiều bản ghi trên bảng khác, vì vậy tôi đã cố gắng tạo trình tạo truy vấn như bên dưới:

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 

Mô hình :

<?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();
    }
    
}

Bộ điều khiển:

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;
    }

Nhưng ngay bây giờ tôi đang nhận được

Chỉ mục không xác định: user_id

thông báo lỗi. Trước đây, không có sự cố hoặc lỗi nào khi tôi sử dụng mà không có trình tạo truy vấn cho đăng nhập của mình:

public function login(string $str, string $fields, array $data) { return $this->where('username', $data['userlogin'])->orWhere('email', $data['userlogin'])
                                  ->first();
    }

Làm thế nào để giải quyết lỗi này?

Trả lời

1 Vickel Aug 16 2020 at 17:50

Theo nhận xét của bạn (hình ảnh) mảng của bạn trông giống như:

Array
(
  [0]=>Array
    (
      [user_id]=>1,
      [user_name]=>'test',
      //etc.
    )
)

Bạn nhận được

Chỉ mục không xác định: user_id

thông báo lỗi, do địa chỉ sai mảng trong khi sử dụng 'user_id' => $user['user_id']

cách chính xác là thêm chỉ mục bạn muốn lấy như:

$this->setUserSession($user[0]);   // where 0 can be changed to the index you pretend

bây giờ mảng đã được làm phẳng và 'user_id' => $user['user_id']không gặp lỗi nữa.