CodeIgniter,模型和ORM,如何处理这个问题?
2022-08-30 12:45:01
我从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等对象。因此我认为这不是一个好的解决方案,因为我类汽车的每个对象,它都会包含很多重复的数据,(它会有很差的性能!),不是吗?
不使用 CodeIgniter 的模型
我可以在不从CodeIgniter的Model类扩展它们的情况下制作我的模型,然后使用常规的PHP5构造函数(__construct()而不是函数Car()),但是在这种情况下的问题是:我如何访问$db对象以使用CodeIgniter的ActiveRecord进行查询?以及,如何在控制器中加载模型(其类)?