【问题标题】:Codeigniter 4 Undefined index: user_idCodeigniter 4 未定义索引:user_id
【发布时间】: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 '&lt;pre&gt;';print_r($user);die;吐出什么?
  • @Vickel Here : imgur.com/a/olgG8lm 我试图为红色突出显示的框显示一次i.stack.imgur.com/sUW0M.jpg 所以我想将数组传递到会话中并尝试循环 2 次以实现我想要的但事实证明它给了我 Undefined index: user_id 错误。
  • 使用$this-&gt;setUserSession($user[0]);

标签: query-builder codeigniter-4


【解决方案1】:

根据您的评论(图片),您的数组如下所示:

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

你得到了

未定义索引:user_id

错误消息,因为在使用 'user_id' =&gt; $user['user_id'] 时错误地寻址数组

正确的方法是添加要检索的索引,如:

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

现在数组已展平,'user_id' =&gt; $user['user_id'] 不再抛出错误。

【讨论】:

    猜你喜欢
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多