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

3

CI_Modelモデルがforcomment_modelと を正しく拡張しているかどうかを確認しますpost_model

:

  class comment_model extends CI_Model{    

   }

  class post_model extends CI_Model{    

   }
于 2012-11-23T05:28:23.350 に答える
2

getComments( ) は、post_model ではなく、comment_modelです。

2 番目のパラメーターを渡すことで、モデルに名前を付けることができます。

$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);

別の DB 接続を配列で渡すこともできますが、その場合は、使用した単純な配列ではなく、多次元配列が必要になります。とにかく、それを行う必要があることはあまりありません。

于 2012-06-06T07:16:47.357 に答える
-1

上記のようにモデル名を配列で使用するだけです。

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