Doctrine 在 Active Record 之上添加了什么 - CodeIgniter?

本文介绍了Doctrine 在 Active Record 之上添加了什么 - CodeIgniter?的处理方法,对大家解决问题具有一定的参考价值

问题描述

我真的很喜欢 CodeIgniter 的 Active Record,它可以很好地支持我所有需要的数据库查询.

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

但我也一直在阅读像 Doctrine 这样的 ORM.当我阅读 Doctrine 的文档时,它似乎不像 Active Record 那样清晰,而且我看不出是什么让它变得更好(如果是的话).

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).

Doctrine 允许哪些是 Active Record 无法实现的?Doctrine 是否使相同的工作更快、更容易、更好?还是它做了 Active Record 不能做的事情?

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.

谢谢,马修

推荐答案

Doctrine 是一个完整的 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.

免责声明:我从未使用过 Doctrine.我会根据自己的理解,尽量说明CodeIgniter的主动记录实现和Doctrine的区别.

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

    // ...

}

您基本上是在使用活动记录方法构建查询.很容易看出每个方法(where()get() 等)如何映射到原始 SQL.与仅使用 $this->db->query() 相比,使用活动记录方法的优势在于 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.

请注意,以下示例代码可能不正确.使用 Doctrine,您可能会有这样的模型:

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;

这只是关于 Doctrine 可以做什么的皮毛.您可以设置属性的默认值或指定表之间的关系.请注意我没有编写任何 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.

请注意,Doctrine 包含自己的查询构建器,因此它在某种程度上完成了 CodeIgniter 的活动记录所做的工作,等等.

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

使用 Doctrine 类似于 CakePHP 或 Ruby on Rails 的活动记录模式实现.您可以查看那里以进一步了解该模式.如果您有 CodeIgniter 背景,CakePHP 的示例可能特别容易理解.

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 主动记录方法更能让 Doctrine 更好的了.它可能更先进,但与任何其他库一样,您想为这项工作选择最好的工具.如果您对 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.

这篇关于Doctrine 在 Active Record 之上添加了什么 - CodeIgniter?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,WP2

admin_action_{$_REQUEST[‘action’]}

do_action( "admin_action_{$_REQUEST[‘action’]}" )动作钩子::在发送“Action”请求变量时激发。Action Hook: Fires when an ‘action’ request variable is sent.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$_REQUEST['action']引用从GET或POST请求派生的操作。源码(Source)更新版本源码位置使用被使用2.6.0 wp-admin/admin.php:...

日期:2020-09-02 17:44:16 浏览:1169

admin_footer-{$GLOBALS[‘hook_suffix’]}

do_action( "admin_footer-{$GLOBALS[‘hook_suffix’]}", string $hook_suffix )操作挂钩:在默认页脚脚本之后打印脚本或数据。Action Hook: Print scripts or data after the default footer scripts.目录锚点:#说明#参数#源码说明(Description)钩子名的动态部分,$GLOBALS['hook_suffix']引用当前页的全局钩子后缀。参数(Parameters)参数类...

日期:2020-09-02 17:44:20 浏览:1069

customize_save_{$this->id_data[‘base’]}

do_action( "customize_save_{$this->id_data[‘base’]}", WP_Customize_Setting $this )动作钩子::在调用WP_Customize_Setting::save()方法时激发。Action Hook: Fires when the WP_Customize_Setting::save() method is called.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_data...

日期:2020-08-15 15:47:24 浏览:806

customize_value_{$this->id_data[‘base’]}

apply_filters( "customize_value_{$this->id_data[‘base’]}", mixed $default )过滤器::过滤未作为主题模式或选项处理的自定义设置值。Filter Hook: Filter a Customize setting value not handled as a theme_mod or option.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分,$this->id_date['base'],指的是设置...

日期:2020-08-15 15:47:24 浏览:898

get_comment_author_url

过滤钩子:过滤评论作者的URL。Filter Hook: Filters the comment author’s URL.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/comment-template.php:32610...

日期:2020-08-10 23:06:14 浏览:930

network_admin_edit_{$_GET[‘action’]}

do_action( "network_admin_edit_{$_GET[‘action’]}" )操作挂钩:启动请求的处理程序操作。Action Hook: Fires the requested handler action.目录锚点:#说明#源码说明(Description)钩子名称的动态部分$u GET['action']引用请求的操作的名称。源码(Source)更新版本源码位置使用被使用3.1.0 wp-admin/network/edit.php:3600...

日期:2020-08-02 09:56:09 浏览:876

network_sites_updated_message_{$_GET[‘updated’]}

apply_filters( "network_sites_updated_message_{$_GET[‘updated’]}", string $msg )筛选器挂钩:在网络管理中筛选特定的非默认站点更新消息。Filter Hook: Filters a specific, non-default site-updated message in the Network admin.目录锚点:#说明#参数#源码说明(Description)钩子名称的动态部分$_GET['updated']引用了非默认的...

日期:2020-08-02 09:56:03 浏览:864

pre_wp_is_site_initialized

过滤器::过滤在访问数据库之前是否初始化站点的检查。Filter Hook: Filters the check for whether a site is initialized before the database is accessed.目录锚点:#源码源码(Source)更新版本源码位置使用被使用 wp-includes/ms-site.php:93910...

日期:2020-07-29 10:15:38 浏览:833

WordPress 的SEO 教学:如何在网站中加入关键字(Meta Keywords)与Meta 描述(Meta Description)?

你想在WordPress 中添加关键字和meta 描述吗?关键字和meta 描述使你能够提高网站的SEO。在本文中,我们将向你展示如何在WordPress 中正确添加关键字和meta 描述。为什么要在WordPress 中添加关键字和Meta 描述?关键字和说明让搜寻引擎更了解您的帖子和页面的内容。关键词是人们寻找您发布的内容时,可能会搜索的重要词语或片语。而Meta Description则是对你的页面和文章的简要描述。如果你想要了解更多关于中继标签的资讯,可以参考Google的说明。Meta 关键字和描...

日期:2020-10-03 21:18:25 浏览:1721

谷歌的SEO是什么

SEO (Search Engine Optimization)中文是搜寻引擎最佳化,意思近于「关键字自然排序」、「网站排名优化」。简言之,SEO是以搜索引擎(如Google、Bing)为曝光媒体的行销手法。例如搜寻「wordpress教学」,会看到本站的「WordPress教学:12个课程…」排行Google第一:关键字:wordpress教学、wordpress课程…若搜寻「网站架设」,则会看到另一个网页排名第1:关键字:网站架设、架站…以上两个网页,每月从搜寻引擎导入自然流量,达2万4千:每月「有机搜...

日期:2020-10-30 17:23:57 浏览:1308