我正在使用 CodeIgniter 3.0.5 ,我已经做了相当多的研究,以找到解决我相对简单的问题的解决方案。
看看我的情况。
我有一个文件名为Technology_model.php
<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Technology_Model extends CI_Model
{
function __construct()
{
parent::__construct();
}
public function getData()
{
$query = $this->db->get('technology');
return $query->result();
}
}
?>
我已将此模型加载到我的控制器文件Technology.php
中,并且我正在尝试访问模型中的方法。
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Technology extends CI_Controller
{
// *******Constructor*******
function __construct()
{
parent::__construct();
}
// *******Constructor*******
public function index()
{
$this->load->model('Technology_Model');
//Model loads fine..checked
$data['records'] =
$this->Technology_model->getData(); //*** <=ERROR in this line
}
}
?>
我找到的解决方案都是关于更改以下字符大小写的内容:
我已经尝试了所有的命名约定。该模型正在加载。但是当我尝试调用模型中的方法时,会出现以下错误。
有人说它是CI 3.0.5中的一个Bug。我已经在autoload.php中配置了我的数据库,加载了数据库库并尝试了所提供的所有解决方案,尽管它们没有用完。
请帮我找一个解决方案。 谢谢。 These are the errors I get
应该命名模型,就像我的情况一样, Technology_model.php 。 此模型的相应类别也是 Technology_Model
答案 0 :(得分:1)
当您使用$this->load->model()
时,大写与查找模型类无关 - Technology_Model
将按照technology_model
的方式工作。但是,使用的字符串将是类的实例的名称,并且区分大小写 - 与任何其他PHP var一样。
换句话说,如果你这样做:
$this->load->model('Technology_Model');
然后要访问该类实例的方法,您需要使用相同的(区分大小写)单词,即
$this->Technology_Model->getData();
不使用完全相同的字符串会导致您看到的错误。
所有这一切,我的做法是使用全部小写的实例名称。对于文件和类名,只有第一个字符是大写。因此文件为Technology_model.php
,类定义为class Technology_model extends CI_Model
。
它将加载到$this->load->model('technology_model');
答案 1 :(得分:0)
我同意@DFriend的回答,虽然我使用某种独特的变量命名个人标准化,但没有任何问题:
文件名:
Technology_m.php // sparing few chars
班级名称:
Technology_m
Loader方法参数:
$this->load->model('Technology_m');
接近模型方法/属性:
$this->Technology_m->getData();
因为您可以使用ucfirst()
而不是库本身调用模型,因此我的内部系统化和变量约定。我使用ucfirst()模型在我的控制器中的所有调用中遵循模型约定,如上所述,但我也使用来自strtolower()
标准之后的控制器的库调用。这样,看到第一眼看到的代码片段,我就可以确定某些东西是模型还是库(实例/属性/方法)。
答案 2 :(得分:0)
看起来CI基本上找不到你的模型的PHP文件,因此无法调用它认为是不存在的类的getData()
。您还没有给我们CI的目录结构,但AFAIK取决于您的模型所在的位置,那么其PHP文件的路径需要反映出来。
例如,我自己的管理模型位于: Codeigniter / application / models / admin 。因此,如果我需要从控制器调用管理模型,我会这样做:
$this->load->model('admin/my_model', 'MyAdmin', true);
$data = $this->MyAdmin->get();
请注意第一个参数中我的模型目录的相对路径以及第二个和参数,它声明了一个变量,您可以在其上运行模型的方法(可选,仅使用它作为示例)