如何从CodeIgniter中的另一个模型继承模型

dqi*_*qiu 10 inheritance extends model codeigniter

我正在为我的项目使用codeigniter,我有这个类模型,我称之为Genesis,如下所示:

class Genesis_model extends CI_Model {
    function __construct() {
        parent::__construct();
    }

    function get() {
        return 'human soul';
    }
}
Run Code Online (Sandbox Code Playgroud)

我有另一个模型,存储在同一目录中,扩展了Genesis_model

class Human_model extends Genesis_model {
    function __construct() {
        parent::__construct();
    }

    function get_human() {
        return $this->get();
    }
}
Run Code Online (Sandbox Code Playgroud)

Human_model由Human控制器使用

class Human extends CI_Controller {     
    function __construct(){
        parent::__construct();
        $this->load->model('human_model');
    }       

    function get_human() {
        $data['human'] = $this->human_model->get_human();
        $this->load->view('human/human_interface', $data);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我执行代码,它将产生一个错误,指向返回$ this-> get().它显示"致命错误:在第2行的......\application\models\human_model.php中找不到类'Genesis_model'".

我使用这种方法是因为几乎所有模型都共享几乎相同的结构.我在Genesis中收集了类似的功能,而其他模型仅作为它们所代表的表所特有的数据供应商.它在我的asp.net(vb.net)中运行良好,但我不知道如何在codeigniter中执行此操作.

有没有办法让Human_model继承Genesis_model.我不认为我可以使用include('genesis_model.php').我不知道它是否有效.

提前致谢.

Alf*_*ava 7

将文件genesis_model.php放在核心目录中

  • 你的意思是让它像MY_Controller一样工作吗? (2认同)

小智 6

如果您的模型只有一个重要的超类,则core/MY_Model很好.

如果要继承超过模型超类,更好的选择是更改自动加载配置.

在application/config/autoload.php中,添加以下行:

    $autoload['model'] = array('genesis_model');
Run Code Online (Sandbox Code Playgroud)

  • 我相信这个答案正是问题的作者想要的.我已经有了一个MY_Model,并希望扩展ME_Model中的MY_Model.通过将ME_Model放在应用程序/模型中并按照上面的建议进行自动加载,我可以实现这一目标. (2认同)

Yas*_*uri 5

将您的 Human_model 更改为:

include('genesis_model.php');
class Human_model extends Genesis_model {
    function __construct() {
        parent::__construct();
    }

    function get_human() {
        return parent::get();
    }
}
Run Code Online (Sandbox Code Playgroud)

注意get_human函数和include.