我刚开始学习CodeIgniter,花了几个小时在Google上深入探索后,我有点困惑。
让我们用一个简单的例子来解释我的问题:我有一个名为“car”的表,其中包含字段“name”和“color”。因此,我想要一个php类Car,这样我的代码最终可以看起来像这样:
$car = new Car('BMW', 'red'); //new $car Object
$car->save(); //this will make an SQL insert to the table 'car'
//Lets query all cars
$cars = Car::get_all();
//cars will be an array of Car objects, (not a set of rows!)
因此,我正在寻找类似于RubyOnRails或Django(Python)中的东西。我需要处理各种关系,并能够以真正的OOP + MVC方式编写代码。以下是我尝试过但失败的方法:使用外部ORM(DataMapper,Doctrine,AcidCrud...),它们要求设置过多,或者在处理关系方面表现不佳。
使用CodeIgniter类(扩展CodeIgniter的Model类)。
class Car extends Model{
public function Car($name='',$color='')
{
$this->name = $name;
$this->color = $color;
parent::Model();
}
public function save()
{
$data = array(
'name' => $this->name ,
'color' => $this->color
);
$this->db->insert('cars' $data);
}
然后问题来了... 这种方法的问题是,如果我对一个$car对象进行var_dump(),我会看到它包含了很多来自CodeIgniter的东西,例如CI_Config、CI_Input、CI_Benchmark等对象。因此,我认为这不是一个好的解决方案,因为每个Car类的对象都会包含大量重复的数据(性能会很差!),不是吗?
不使用CodeIgniter的模型
我可以创建我的模型而不继承CodeIgniter的Model类,然后使用常规的PHP5构造函数(__construct() 而不是 function Car()),但在这种情况下的问题是:如何访问$db对象以使用CodeIgniter的ActiveRecord进行查询? 如何在控制器中加载模型(它们的类)?