这是什么主义上面添加活动记录 - codeIgniter? [英] What Does Doctrine Add Above Active Record - CodeIgniter?

查看:105
本文介绍了这是什么主义上面添加活动记录 - codeIgniter?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我真的很喜欢codeIgniter的活动记录,以及如何很好地将允许所有我需要的数据库查询。

I really like CodeIgniter's Active Record and how nicely it allows all my needed database queries.

不过,我也一直在念叨像学说的ORM。当我读到主义的文档,它似乎并不清楚使用的活动记录,我看不到有什么令它变得更好(如果是)。

But I've also been reading about ORMs like Doctrine. When I read Doctrine's documentation, it does not seem as clear to use as Active Record, and I can't see what makes it better (if it is).

这是什么主义允许是不可能的活动记录?是否主义做出同样的工作更快,更方便,更好的?或者它做的事活动记录不能做?

What does Doctrine allow that is not possible with Active Record? Does Doctrine make the same job faster, easier, better? Or does it do things Active Record cannot do?

如果人可以发布任务显示什么,我们正在谈论的例子最好的是。

Best would be if people could post examples of tasks showing what we're talking about.

谢谢, 马修

推荐答案

主义是实现了活动记录模式的全面ORM。 codeIgniter的活动记录类是一个查询生成器/数据库的包装,是基于改良版的格局。

Doctrine is a full-fledged ORM that implements the active record pattern. CodeIgniter's active record class is a query builder/database wrapper that is based on a "modified" version of the pattern.

免责声明:我从来没有使用原则。我会尽我所能来说明codeIgniter的活动记录和实施原则之间的差异,根据我的理解。

Disclaimer: I have never used Doctrine. I will try my best to illustrate the differences between CodeIgniter's active record implementation and Doctrine, based on my understanding.

使用codeIgniter的活动记录类,您可能实现这样一个模式:

Using CodeIgniter's active record class, you might implement a model like this:

class User_model extends CI_Model
{

    public function get_user_by_username($username)
    {
        // Build query using active record methods
        $this->db->where('username', $username);
        $this->db->where('active', 1);

        // Execute query
        $query = $this->db->get('users');

        // Return results
        return $query->result();
    }

    // ...

}

您基本上建立使用活动记录方式查询。可以很容易地看到每一个方法(其中()的get()等)映射到原始的SQL。使用活动记录的方法,而不是优势,只是 $这个 - > DB->查询()是codeIgniter编译基于数据库的每个查询驱动程序所使用。除此之外,codeIgniter的活动记录的实现并没有真正做多。如有任何疑问,你需要,你需要创建。我希望我已经说明了活动记录方法是如何类似于查询生成器。

You are basically building the query using the active record methods. It's easy to see how each method (where(), get(), etc) maps to raw SQL. The advantage to using the active record methods as opposed to just $this->db->query() is that CodeIgniter compiles each query based on the database driver you are using. Other than that, CodeIgniter's active record implementation doesn't really do much. Any queries you need, you'll need to create. I hope I've illustrated how the active record methods are similar to a query builder.

请注意下面的示例code可能不正确。使用原则,你可能有一个模型是这样的:

Note that that the following sample code may be incorrect. Using Doctrine, you might have a model like this:

/** @Entity */
class User
{

    /** @Column(type="integer") */
    private $id;

    /** @Column(length=50) */
    private $username;

    // ...

}

然后使用该模型和相关活动的记录功能,你会做这样的事情:

Then to use the model and the associated active record functionality, you would do something like this:

// Instantiate object
$user = new User();

// Set properties
$user->username = 'some_username';

// Save object
$user->save();

// Access properties
echo $user->id;

这是只是表面的东西学说能做条款。您可以设置默认值属性或指定表之间的关系。请注意,我怎么没写任何SQL或构建查询。我只是设置对象的属性,然后将其保存。原则需要在剩下的事情。

This is just scratching the surface in terms of what Doctrine can do. You can set default values for properties or specify relationships between tables. Notice how I didn't write any SQL or build the query. I just set the properties of the object and then saved it. Doctrine takes care of the rest.

请注意,这种理论包括它自己的查询生成器,所以在某种程度上,它做什么codeIgniter的活动记录呢,等等。

Note that Doctrine includes its own query builder, so in a way it does what CodeIgniter's active record does, and more.

使用原则是类似CakePHP的或Rails的实施活动记录模式的红宝石。你可以看看那里进一步了解的格局。 CakePHP的例子可能是特别容易,如果你从一个codeIgniter背景来消化。

Using Doctrine is similar to CakePHP's or Ruby on Rails' implementation of the active record pattern. You could take a look there for additional insight into the pattern. CakePHP's examples might be particularly easy to digest if you're coming from a CodeIgniter background.

要回答你的一些其他问题,我不认为有任何使学说比codeIgniter活动记录的方法更好。这可能是更先进的,但像任何其他库,要挑选适合这份工作的最佳工具。如果你很高兴与codeIgniter的活动记录的方法,你认为没有必要为一个先进的ORM,然后跳过它。

To answer some of your other questions, I don't think there's anything that makes Doctrine better than the CodeIgniter active record methods. It may be more advanced, but like any other library, you want to pick the best tool for the job. If you are happy with CodeIgniter's active record methods and you see no need for an advanced ORM, then skip it.

这篇关于这是什么主义上面添加活动记录 - codeIgniter?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆