2012-12-13 31 views
-2

我想在codeigniter中创建我的用户模块,但无法弄清楚如何将结果从我的模型中的查询传递到允许我在视图中使用的控制器。如何将变量从模型传递到控制器以用于代码点火器中的视图?

这里是我的模型:

public function user() 
     { 
      $session = $this->session->userdata('is_logged_in'); 
      $user_id = $this->session->userdata('id'); 
      $query = $this->db->query("SELECT * FROM users WHERE id=$user_id LIMIT 1"); 
      foreach ($query->result() as $row) 
      { 
       $row->first_name; 
       $row->id; 
       $row->email; 
       $row->last_name; 
      } 

     } 

,这里是我的控制器。我如何传递这些对象?或者我应该把它们放在一个数组中,然后传递数组(然后不知道如何传递它),然后从控制器的数组中提取它们?

public function edit() 
    { 
     $data['first_name'] = $this->session->userdata('first_name'); 
     $data['profile_icon'] = 'edit'; 
     $data['profile_breadcrumbs'] = 'Edit Profile'; 
     $data['main_content'] = 'account/edit'; 
     $this->load->view('includes/templates/main_page_template', $data); 
     $this->load->library('session'); 
     $this->load->model('account_model'); 
     $session = $this->session->userdata('session_id'); 
     $this->account_model->user(); 
     if($session) 
     { 
      //TRYING TO GET OBJECTS 
     } 
    } 

我发现了类似的问题,但很难找到我正在寻找的东西。

在此先感谢

+0

为什么你会得到如此多的赞誉吗?你是坏苹果还是summin? – stormdrain

+1

我真的不知道,我希望不会。这似乎是一个有效的问题,似乎很清楚并包含代码。我仍然认为应该对投票进行解释。 – LightningWrist

回答

2

控制器:

$data['user']=$this->account_model->user(); 
//populates $data['user'] with the user details based on the session. 
$this->load->view('includes/templates/main_page_template', $data); 

的型号:

public function user() 
    { 
     $session = $this->session->userdata('is_logged_in'); 
     $user_id = $this->session->userdata('id'); 
     $query = $this->db->query("SELECT * FROM users WHERE id=$user_id LIMIT 1"); 
     if($query->num_rows()==1) 
     { 
      $data = $query->result_array(); 
      return $data[0]; 
     //above returns the single row you need to the controller as an array. 
     //to the $data['user'] variable. 
     } else { 
      do something here to handle no return 
     } 
    } 

然后在视图中的数据是通过$用户变量访问,所以你可以这样做:

echo 'Hi '.$user['first_name']; 
2

你必须把它分配给一个变量,并与工作:

$user = $this->account_model->user(); 

foreach($user->result() as $row){ 
    echo $row->name; 
} 

如果你想将数据传递给视图,你必须确保你加载最后毕竟$data的观点已设置:由模型产生

$user = $this->account_model->user(); 
$data['user'] = $user; 
$this->load->view('includes/templates/main_page_template', $data); 

那么你的用户数据将在视图中可通过$user变量。


编辑:

也注意到你是不是return从模型荷兰国际集团任何东西:/

型号:

public function user() 
    { 
     $session = $this->session->userdata('is_logged_in'); 
     $user_id = $this->session->userdata('id'); 
     $query = $this->db->query("SELECT * FROM users WHERE id=$user_id LIMIT 1"); 
     return $query; 

    } 

控制器:

$user = $this->account_model->user(); 
$data['user'] = $user; 
$this->load->view('includes/templates/main_page_template', $data); 

V iew:

foreach($user->result() as $row){ 
    $first_name = $row->first_name; 
    $id = $row->id; 
    $email = $row->email; 
    $last_name = $row->last_name; 
} 

echo "User id: $id has $first_name as a first name, $last_name as their last name, and $email as their email address"; 

因此,您的模型查询数据库,返回结果。控制器在模型中调用它想要的数据(在这种情况下为user())并将其发送到视图。该视图循环查询并显示数据。

+0

好的,这就是我正在寻找的。我唯一的问题是你发布的第一个代码块是在模型中,并取代我现有的foreach语句? – LightningWrist

+0

并确保你的'user()'函数实际返回用户! '$ user = $ this-> account_model-> user();'如果你的'user()'函数没有返回任何东西,'不会帮助你。 –

+0

@LightningWrist我更新了答案;没有意识到你实际上并没有从模型中返回数据。我的例子只是一个例子,有许多方法可以做到这一点。 – stormdrain

相关问题