7

这些是控制器

class Dashboard extends CI_Controller{
public function __construct(){
    parent::__construct();
    $this->load->model("admin/post_model");
    $this->load->model("admin/comment_model");
}
    public function index(){
    $data['post_res'] = $this->post_model->getPost();
    $data['com_res']  = $this->post_model->getComments();
    }
 }

我无法在同一个控制器中加载 2 个模型。它给了我一个错误

Fatal error: Call to a member function getComments() on a non-object in C:\xampp\htdocs\blog\application\controllers\ram-admin\dashboard.php on line 13

我怎么可能加载模型?

提前非常感谢您!

4

6 回答 6

6

尝试这个

class Dashboard extends CI_Controller {
 function __construct() {
      parent::__construct(); 

    $this->load->model("admin/post_model","post_model");
    $this->load->model("admin/comment_model","comment_model");
  }

public function index(){

    $data['post_res'] = $this->post_model->getPost();
    $data['com_res']  = $this->comment_model->getComments();
}
于 2012-06-06T07:18:33.097 回答
3

检查模型是否正确扩展了CI_Modelforcomment_modelpost_model

示例

  class comment_model extends CI_Model{    

   }

  class post_model extends CI_Model{    

   }
于 2012-11-23T05:28:23.350 回答
2

getComments( ) 是comment_model,而不是 post_model..

您可以通过传递第二个参数来命名您的模型;

$this->load->model('admin/comment_model', 'comments');
$data['com_res'] = $this->comments->getComments();
于 2012-06-06T07:16:37.273 回答
0

这很奇怪

我只是把这行代码

 $this->load->model("admin/comment_model","comment_model");

在这之前

 $this->load->model("admin/page_model","page_model");

现在它工作正常:)

谢谢大家的回复!

于 2012-06-06T08:00:50.330 回答
-1

对于多个模型,您可以这样做:

$models = array(
    'menu_model' => 'mmodel',
    'user_model' => 'umodel',
    'admin_model' => 'amodel',
);

foreach ($models as $file => $object_name)
{
    $this->load->model($file, $object_name);
}

但如前所述,您可以创建文件 application/core/MY_Loader.php 并编写自己的加载模型的方法。我认为这可能有效(未经测试):

class MY_Loader extends CI_Loader {

    function model($model, $name = '', $db_conn = FALSE)
    {
        if (is_array($model))
        {
            foreach ($model as $file => $object_name)
            {
                // Linear array was passed, be backwards compatible.
                // CI already allows loading models as arrays, but does
                // not accept the model name param, just the file name
                if ( ! is_string($file)) 
                {
                    $file = $object_name;
                    $object_name = NULL;
                }
                parent::model($file, $object_name);
            }
            return;
        }

        // Call the default method otherwise
        parent::model($model, $name, $db_conn);
    }
}

从上面使用我们的变量:

$this->load->model($models);

您还可以允许在数组中传递单独的数据库连接,但是您需要有一个多维数组,而不是我们使用的简单数组。无论如何,您并不经常需要这样做。

于 2012-06-06T07:16:47.357 回答
-1

只需使用上述数组中的模型名称即可。

$this->load->model(array("admin/post_model", "admin/comment_model"));
于 2012-06-06T07:17:56.647 回答