查询CodeIgniter中未定义的id

时间:2014-06-11 14:22:10

标签: php codeigniter

我的应用程序中有一个模型:

public function get_news() 
{
    ....
        $this->load->database();


        $top_news = $this->db->query("SELECT * FROM News ");

        if ($top_news->num_rows()) 
        {
            $top_news = $top_news->result();
            $top_news['AuthorInfo'] = $this->get_author($top_news['Userid']);
            $this->cache->save('home.top_news', $top_news, 600);
        } 
        else 
        {
            $this->cache->save('home.top_news', NULL, 600);
        }
    }

    return $top_news;
}
public function get_author($author_id)
{
    $this->load->database();
    $author = $this->db->query("SELECT * FROM AdminUsers WHERE id=? LIMIT 1", array($author_id));
    if ($author->num_rows())
    {
        $author = $author->row_array(); 
    }
    else 
    {
        $author = NULL;
    }

    return $author;
}

我收到了错误:

Message: Undefined index: Userid  

但是这个字段存在于我的数据库中的新闻表中 我不明白我的问题在哪里 请帮帮我吧

我写了var_dump,我得到了

Array
(
  [0]=>stdClass object
    (
       [id]=>56
       [Userid]=>4
       ...

3 个答案:

答案 0 :(得分:1)

使用此查询,您将获得结果集(0,1或更多行),而不是一行:

    $top_news = $this->db->query("SELECT * FROM News ");

您需要遍历结果。

foreach ($top_news->result_array() as $row)
{
   $row['AuthorInfo'] = $this->get_author($row['Userid']);
   $this->cache->save('home.top_news', $row, 600);
}

如果您确定只收到一行,或者只想选择第一行,则可以使用此行:

 $row = $top_news->row_array(); 
 $row['AuthorInfo'] = $this->get_author($row['Userid']);
 $this->cache->save('home.top_news', $row, 600);

答案 1 :(得分:0)

$top_news是一个对象,而不是一个数组,如果你想获得第一个用户ID,那么你需要获得$top_news[0]中的用户ID。

所以改变

$this->get_author($top_news['Userid']);

$this->get_author($top_news[0]->Userid);

答案 2 :(得分:0)

您应首先获取所有新闻并循环设置AuthorInfo并保存缓存result

您的查询应如下所示:

$query = $this->db->query("SELECT * FROM News");

$top_news = $query->result_array();

foreach($top_news as &$row)
{
     $row['AuthorInfo'] = $this->get_author($row['Userid']);
}

$this->cache->save('home.top_news', $top_news, 600);