CodeIgniter传递数组而不是对象

时间:2012-10-12 18:47:00

标签: codeigniter object

框架:CI

情况:

我在codeigniter中遇到了这个非常令人沮丧的问题。

这是代码: (控制器)

class sampleController extends CI_Controller {

function index() {
    data['message'] = 'something';

    data['js'] = array('script1.js', 'script2.js');
    data['css'] = array('style1.css', 'style2.css', 'style3.css');

    $this->load->model('user_model');
    $user = $this->input->post('username');

    data['user_id'] = $this->user_model->getUserIdByUsername($user);
    data['user_info'] = $this->user_model->getAllUserInfo($user);

    $this->load->view('someview', $data);

}

}

好吧我的控制器,我传递了几个数据,如jscssuser_iduser_info

这是我模型中的方法:

getUserIdByUsername($user) {
$this->db->select("id");
$this->db->where("username", $user);
$result = $this->get("users");
return $result->row();

}

getAllUserInfo($user) {
$this->db->select("first_name, last_name, age");
$this->db->where("username", $user);
$result = $this->get("users");
return $result->row();
}

当我试图访问控制器传递的所有变量时,视图中出现问题

  1. 如果我尝试回复$message,它会像这样正确地呈现出来something
  2. 如果我尝试使用foreach $js$css进行循环播放

    foreach($js as $key){//echo script here}

    foreach($css as $key){// echo link rel stylesheet here}

  3. 它会正确呈现,就像<script src='script1.js'></script><script ...></script>迭代到所有$js一样css

    但如果我尝试回显$ user_id。 。它不会,因为。这是一个对象。

    所以要解决我所做的问题。 。<?php foreach($user_id as $id){} ?>我可以在这种情况下回复$ id 无论如何,如果没有那个混乱的foreach,我可以简单地回应它。

    我理解当我来$user_info时,可以这样做foreach($user_info as $key => $value){$info[$key]=$value} 但是在视图中有更好的方法吗?

    也许代替对象,在视图可以使用它之前发送数组?

    非常感谢

    编辑:修复相同的方法名称;

4 个答案:

答案 0 :(得分:3)

$result->row();返回包含所有选定字段的对象。仅仅因为SELECT id字段$data['user_id'] = $this->user_model->getUserIdByUsername($user)->id; 字段不会更改返回值。试试这个:

getUserIdByUsername($user) {
    $this->db->select("id");
    $this->db->where("username", $user);
    $result = $this->get("users");
    return $result->row()->id;
}

OR:

result_array()

如果您想要数组而不是对象,请检查more information about generating query results的CI文档:

  

row_array()

     

此函数将查询结果作为纯数组返回,或者为空   没有产生结果的数组。

     

{{1}}

     

与上面的row()函数相同,但它返回一个数组。

答案 1 :(得分:2)

使用{$user_id[0]['id']},它应该在视图中回显用户ID。在您的问题中,两个方法名称相同,我认为第二个应该是getAllUserInfo($user)

答案 2 :(得分:1)

就像你说的那样,这是一个对象。所以你可以访问像这样的字段。

echo $user_id->id;

答案 3 :(得分:1)

使用模型中的row_array函数会将其作为数组而不是对象返回,如果这是您感兴趣的内容。您可以在此处阅读生成查询结果:http://ellislab.com/codeigniter/user_guide/database/results.html