Codeigniter型号:只返回不加载?模型只是命名空间吗?

时间:2011-11-13 23:00:36

标签: codeigniter

我发现CI的范围有点迟了。我一直在创建这样的模型:

$this->load->model('user');
$this->user->load ($user_id);

然后我会传递$ this->用户对象,以便能够从该对象访问我需要的所有各种内容,更新属性等。

我下载了Phil Sturgeon CI应用程序和PyroCMS,我发现他主要从对象的方法中返回数据,就像一个直接的程序函数。

那么,模型真的只应该用在CI中的命名空间吗?

我发现按照我的方式使用它们,只是刚刚发现的范围问题,我正在覆盖我的模型。

当然解决方案是加载时的名称,但这意味着我必须跟踪并警惕每个人使用的名称,这将是一个问题。

其他人如何使用CI模型,主要是从他们那里返回东西而不是将它们用作全功能对象?

2 个答案:

答案 0 :(得分:2)

我发现Phil Sturgeon回答了这个问题:Codeigniter models are just utility classes?基本上我需要知道的事情。我仍然可以使用php $object = new Class语法来使用加载的模型。我会这样做:

class Companies
{
    private $_users;

    public function __construct ()
    {
        $this->load->model ('users');
        $this->_users = new Users;
    }
}

privatenew我认为我最终是安全的。可能我应该继续在模型之外进行,而不是在构造函数中,然后将其作为依赖项传递。我放弃了DI。

我想我已经离开了窗台。

答案 1 :(得分:2)

使用CI两年后,我就开始使用这些模型:

// Singleton class to lookup Users and perform other
// tasks not related to one specific user
class User_model extends MY_Model {
    public static $CI;
    public function __construct()
    {
        parent::__construct();
        self::$CI =& get_instance();
    }
    public function getByEmail($email)
    {
        $data = $this->db->where('email', $email)->get('users')->first_row();
        if ($data)
        {
            $user = new User;
            return $user->load($data);
        }
    }
    public function getAllUsers()
    {
        $data = $this->db->get('users')->result();
        foreach ($data as &$row)
        {
            $user = new User;
            $row = $user->load($row);
        }
        return $data;
    }
    //... other functions that makes sense in a singleton class
}

// Actual user object.  Instantiate one for every user you load...
class User {
    public function __construct($id)
    {
        $data = User_model::$CI->db->where('id', $id)->first_row();
        $this->load($data);
    }

     public function load($data)
     {
        foreach ($data as $k => $v)
        {
            $this->$k = $v;
        }
        return $this;
     }
}