【问题标题】:Result Generation on CodeigniterCodeigniter 上的结果生成
【发布时间】:2013-04-20 11:54:09
【问题描述】:

我有这个问题,其中我的模型返回一个对象,但是在控制器中它似乎找不到该字段时,我总是收到此错误 “尝试获取非对象的属性”但是当我尝试 var_dump() 时,我的模型返回的结果是有值的。我似乎无法理解为什么我无法访问它。它是否连接到活动记录?

以下是我的模型。

public function retrieve($user_id = FALSE)
{
    if($user_id === FALSE)
    {
        $query = $this->db->get('login');
        return $query->row();
    }
    else 
    {
        $query = $this->db->get_where('login',array('account_id'=>$user_id));
        return $query->result();
    }
}

这是我的控制器的代码 sn-p,我试图访问我的模型的部分

    $this->load->model('account');
    $acc = $this->account->retrieve($sess_userid);
    var_dump($this->account->retrieve($sess_userid));
    echo $acc->user_id;

注意 $sess_userid 有一个值。它是一个数字

有人知道这个问题吗?

更新

print_r()

Array (
        [0] => stdClass Object (
            [account_id] => 2000005
            [userid] => admin
            [user_pass] => d033e22ae348aeb5660fc2140aec35850c4da997
            [sex] => M
            [email] => admin@ignitero.com
            [group_id] => 99
            [admin] => 1
            [restrictions] => 0
            [state] => 0
            [unban_time] => 0
            [expiration_time] => 0
            [logincount] => 0
            [lastlogin] => 0000-00-00 00:00:00
            [last_ip] =>
            [birthdate] => 0000-00-00
            [character_slots] => 0
            [pincode] =>
            [pincode_change] => 0
        )
)

var_dump()

array(1) { 
    [0]=> object(stdClass)#23 (18) { 
        ["account_id"]=> string(7) "2000005" 
        ["userid"]=> string(5) "admin" 
        ["user_pass"]=> string(40) "d033e22ae348aeb5660fc2140aec35850c4da997" 
        ["sex"]=> string(1) "M" 
        ["email"]=> string(18) "admin@ignitero.com" 
        ["group_id"]=> string(2) "99" 
        ["admin"]=> string(1) "1" 
        ["restrictions"]=> string(1) "0" 
        ["state"]=> string(1) "0" 
        ["unban_time"]=> string(1) "0" 
        ["expiration_time"]=> string(1) "0" 
        ["logincount"]=> string(1) "0" 
        ["lastlogin"]=> string(19) "0000-00-00 00:00:00" 
        ["last_ip"]=> string(0) "" 
        ["birthdate"]=> string(10) "0000-00-00" 
        ["character_slots"]=> string(1) "0" 
        ["pincode"]=> string(0) "" 
        ["pincode_change"]=> string(1) "0" 
    } 
} 

【问题讨论】:

  • 您是否在表中有 user_id,因为您在 account_id 中分配,否则获取所有记录
  • 只是 print_r($acc);让我们知道你得到了什么..??
  • 你能把你得到的东西粘贴到 var_dump 中吗?
  • 请看我的更新

标签: php codeigniter


【解决方案1】:

当您返回对象时,您应该使用 row 来获取单个记录。

public function retrieve($user_id = FALSE)
{
    if($user_id === FALSE)
    {
        $query = $this->db->get('login');
        return $query->result();
    }
    else 
    {
        $query = $this->db->get_where('login',array('account_id'=>$user_id));
        return $query->row();
    }
}

并像这样访问它

echo $acc->user_id;

如果您认为条件应该返回多行而不是像这样访问它

return $query->result();

echo $acc[0]->user_id;
echo $acc[1]->user_id;
echo $acc[2]->user_id;

【讨论】:

  • 是的,我正在返回一个对象,因为它是 row(),但是我为什么无法访问,或者它指出用户 ID 不存在,实际上它在数据库中存在
  • 看到这个return $query->result(); 它正在返回对象数组,这就是为什么它说试图获取非对象的属性,因为返回的东西是包含对象的数组。使用return $query->row();
  • 但它不返回 result() 因为它进入了第一个条件
  • 顺便说一下,你上面的例子和我的不同
  • @lemoncodes 我的回答很清楚你只需要看看你在哪里犯了错误
猜你喜欢
  • 2019-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 2021-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-04
相关资源
最近更新 更多