gpt4 book ai didi

php - CodeIgniter、models、ORM,这个怎么处理?

转载 作者:IT王子 更新时间:2023-10-29 00:59:26 24 4
gpt4 key购买 nike

我从 CodeIgniter 开始,在 Google 潜水几个小时后,我有点困惑。

让我们尝试用一个简单的例子来解释我的问题:我有一个表“汽车”,其中包含“名称”和“颜色”字段。因此我想要一个 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() 而不是函数 Car()),但这种情况下的问题是:我如何访问 $db 对象使用 CodeIgniter 的 ActiveRecord 进行查询?以及,我如何在 Controller 中加载模型(它的类)?

最佳答案

你可能想要这样的东西:

   class Cars {

//List all neccessary vars here

function __construct() {
//get instance of Codeigniter Object and load database library
$this->obj =& get_instance();
$this->obj->load->database();
}

//You can now list methods like so:
function selectCar($name, $color) {

$this->obj->db->select('color')->from('car')->where('color', $color);
$query = $this->obj->db->get();

switch ($query->num_rows()) {
case 0:
return false;
break;
default:
return $query->result();
break;
}
}

希望对您有所帮助!

关于php - CodeIgniter、models、ORM,这个怎么处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2141007/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com