CodeIgniter,模型和ORM,该如何处理?

2020/12/31 22:21 · php ·  · 0评论

我从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()而不是函数Car())进行建模,但是这种情况下的问题是:如何访问$ db对象以进行查询使用CodeIgniter的ActiveRecord?以及如何在控制器中加载模型(其类)?

您可能想要这样的东西:

   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;
        }
    }

希望有帮助!

尝试使用Doctrine,这是一个很棒的ORM,可以轻松地集成到CodeIgniter中。

看看ORM的codeigniter Wiki页面

http://codeigniter.com/wiki/ORM/

对于未来的Google员工,这是我撰写的有关如何将CodeIgniter 2与Doctrine 2集成的教程

如果您有任何问题,请告诉我。

我很高兴与Codeigniter一起使用Propel。

查看GAS ORM,听起来不错,方便并且易于使用。此针对CodeIgniter的ORM实现的一些功能:

  • 支持的数据库:cubrid,mssql,mysql,oci8,odbc,postgre,sqlite,sqlsrv。(包括PDO,如果您与CI回购保持同步)
  • 支持多个数据库连接。
  • 支持多种关系。
  • 支持复合键(用于定义关系的键)。
  • 从数据库表自动创建模型,反之亦然。
  • 通过创建迁移文件自动同步模型表。
  • 每个请求的缓存。
  • 自引用和邻接列/数据(分层数据)。
  • 渴望加载以最大化您的关系查询(以性能方式)。
  • 各种查找程序方法(可以与大多数CI AR链接)和聚合。
  • 只需最少的设置即可进行验证和自动映射输入集合。
  • 勾子可以控制您的模型。
  • 扩展以在模型中共享您的通用功能/库。
  • 交易和其他CI AR优势。
  • 随附的phpunit测试套件可确保大多数API的一致性。

有一种形式具有火花支持->因此易于安装

您要做的是创建一个扩展ActiveRecord类的库。有人在你前面:

http://codeigniter.com/wiki/ActiveRecord_Class/

线程中的好mod,在这里:

http://codeigniter.com/forums/viewthread/101987/

如果您正在寻找应用程序通用的ORM方法,则只需扩展ActiveRecord类即可。对于我的应用程序,了解表的结构使我能够构建(自动生成)表单,并进行其他映射。我进行API到API的映射,因此我在MyActiveRecord中包含GetStructure()方法,并从那里构建其他内容。

(RoR窃笑现在可以烦扰了)

编辑:虽然我是Doctrine范围和功能的粉丝,但我认为对命令行使用的需求使其超出了CI的精神。最适合您的就是最适合您的,但是如果我要使用Doctrine,那么我最好还是使用Symfony,对吗?还是RoR,对吗?看到我在哪里玩这个吗?在正确的时间使用正确的工具。

我将CodeIgniter与Propel一起使用,它们确实混合得很好。我已经使用了一段时间,并以这种方式运行了一些Web应用程序。由于我发现了几种糟糕的方法(某些方法包括修改Apache的配置!)。我决定发布有关如何执行此操作的博客文章。您可以在这里阅读

希望我能帮忙!

我认为php-activerecord是一个很好的嵌入式ORM。我已经将它与Slim Framework一起使用了几次,我认为这将是使用CI的本机模型类的理想选择。这是一些示例代码和链接:

$post = new Post();
$post->title = 'My first blog post!!';
$post->author_id = 5;
$post->save();

PHP ActiveRecord

我知道这已经很老了,但是对于那些现在只使用codeigniter并想要使用orm的人来说,可以使用本教程将propel与codeigniter集成

http://llanalewis.blogspot.com/2013/06/installing-propel-in-codeigniter.html

本文地址:http://php.askforanswer.com/codeignitermoxingheormgairuhechuli.html
文章标签: ,   ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!