我可以直接从Code Igniter中的查询中获取模型吗?
模型
<?php
class User_Model extends CI_Model {
public $user_id;
public $name;
public $team_id
public function getTeamName() {
$this->db->select('name');
$this->db->from('team');
$this->db->where('team_id',$this->team_id);
$query = $this->db->get();
$team = $query->row();
if($empresa == null){
return "";
} else {
return $team->name;
}
}
public function getUser($id) {
$query = $this->db->get_where('users', array('user_id' => $id));
$user = $query->row();
return $user;
}
我想getUser($ id)函数返回一个用户对象,例如&#39; new User_Model()&#39;能够在视图中使用 getTeamName()功能。我可以做吗? 现在返回一个对象,但不返回User_Model()对象。
答案 0 :(得分:0)
错误从视图中调用模型中的方法。
在模型中使用
function getUser($id){
$query = $this-db->select('*')
->from('users')
->where('user_id', $id)
->get();
return $query->result();
}
这会返回一个包含所有数据的对象,然后像这样调用控制器中的方法
$data['user_model'] = $this->model_name->getUser($id);
$this->load->view('Your_View',$data);
然后在视图中$ user_model是对象
视图中的
print_r($user_model);
答案 1 :(得分:0)
只要加载了模型,您就可以在视图中访问任何公共函数或属性,如:
$this->user_model->getUser()
或$this->user_model->team_id
查看:
<?php
echo $this->user_model->getUser(1)->username;
这在某些方面违反了MVC,但我可以理解这样做的逻辑,基于以下场景,你想说使用num_rows
和result
而不做计数:
class User_Model extends CI_Model {
public function getUsers() {
return $this->db->get('users');
}
}
class Some_Controller extends CI_Controller {
public function index() {
$this->load->model('user_model');
$data['users'] = $this->user_model->getUsers();
$this->load->view('some_view', $data);
}
}
查看:
<?php
if ($users->num_rows() > 0) {
foreach ($users->result() as $row) {
echo $row->username;
}
} else {
echo 'No users';
}
答案 2 :(得分:0)
实际上还有另一种可以使用
的可能性创建Team_model
和User_model
Team_model
看起来像
class Team_model extends CI_Model
{
$arrTeamNames = [];
public function getTeamName($team_id)
{
if (!isset($this->arrTeamNames[$team_id]))
{
$query = $this->db
->select('name')
->from('team')
->where('team_id',$this->team_id)
->get();
if ($query->num_rows() == 1)
{
$objTeam = $query->row();
$this->arrTeamNames[$team_id] = $objTeam->name;
return $objTeam->name;
}
return '';
}
return $this->arrTeamNames[$team_id];
}
}
和User_model
class User_Model extends CI_Model
{
public function getUser($id)
{
$query = $this->db->get_where('users', array('user_id' => $id));
if ($query->num_rows() == 1)
{
$user = $query->row(0, 'User_Object');
return $user;
}
}
}
class User_Object
{
public function getTeamName()
{
$ci = get_instance();
$ci->load->model('Team_model');
return $ci->team_model->getTeamName($this->team_id);
}
}
请注意
User_model
您还有一个User_Object
由row()
函数映射,该函数已有详细记录 here
现在,如果您在一个控制器中调用此模型并将其传递给视图,您实际上可以以适当的方式访问模型函数,例如。
class User extends CI_Controller
{
public function detail($user_id)
{
$this->load->model('User_model');
$objUser = $this->User_model->getUser($user_id);
$this->load->view('user-detail', ['objUser' => $objUser]);
}
}
//用户详细信息视图
echo $objUser->getTeamName();