如何直接从查询中获取模型? - >笨

时间:2018-02-10 12:55:30

标签: php codeigniter

我可以直接从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()对象。

3 个答案:

答案 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_rowsresult而不做计数:

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_modelUser_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();