加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

数据库 – Doctrine在Active Record上面添加了什么 – CodeIgnit

发布时间:2020-12-12 07:29:35 所属栏目:MsSql教程 来源:网络整理
导读:我非常喜欢CodeIgniter的Active Record,以及它如何很好地允许我所有需要的数据库查询. 但我也一直在阅读像Doctrine这样的ORM.当我阅读Doctrine的文档时,使用Active Record似乎并不清楚,我看不出是什么让它更好(如果是). 什么是Doctrine允许使用Active Record
我非常喜欢CodeIgniter的Active Record,以及它如何很好地允许我所有需要的数据库查询.

但我也一直在阅读像Doctrine这样的ORM.当我阅读Doctrine的文档时,使用Active Record似乎并不清楚,我看不出是什么让它更好(如果是).

什么是Doctrine允许使用Active Record无法实现的? Doctrine能否更快,更轻松,更好地完成同样的工作?或者它做的事情Active Record不能做?

如果人们可以发布显示我们正在谈论的内容的任务示例,那将是最好的.

谢谢,
马修

解决方法

Doctrine是一个完整的ORM,它实现了活动记录模式. CodeIgniter的活动记录类是一个查询构建器/数据库包装器,它基于模式的“修改”版本.

免责声明:我从未使用过Doctrine.根据我的理解,我将尽力说明CodeIgniter的活动记录实现与Doctrine之间的区别.

使用CodeIgniter的活动记录类,您可以实现如下模型:

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的主动记录实现并没有真正做多少.您需要创建所需的任何查询.我希望我已经说明了活动记录方法与查询构建器的相似之处.

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

/** @Entity */
class User
{

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

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

    // ...

}

然后,要使用模型和关联的活动记录功能,您可以执行以下操作:

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

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

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

// Access properties
echo $user->id;

这只是学说可以做什么的表面.您可以为属性设置默认值或指定表之间的关系.请注意我没有编写任何SQL或构建查询.我只是设置对象的属性,然后保存它.学说处理其余的事情.

请注意,Doctrine包含自己的查询构建器,因此在某种程度上它可以执行CodeIgniter的活动记录,以及更多.

使用Doctrine类似于CakePHP或Ruby on Rails实现的活动记录模式.您可以在那里查看有关该模式的其他信息.如果您来自CodeIgniter背景,CakePHP的示例可能特别容易消化.

为了回答你的其他一些问题,我认为没有任何东西可以使Doctrine比CodeIgniter主动记录方法更好.它可能更高级,但与任何其他库一样,您希望为工作选择最佳工具.如果您对CodeIgniter的活动记录方法感到满意,并且您认为不需要高级ORM,那么请跳过它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读