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

前端之家收集整理的这篇文章主要介绍了数据库 – Doctrine在Active Record上面添加了什么 – CodeIgniter?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我非常喜欢CodeIgniter的Active Record,以及它如何很好地允许我所有需要的数据库查询. @H_403_2@但我也一直在阅读像Doctrine这样的ORM.当我阅读Doctrine的文档时,使用Active Record似乎并不清楚,我看不出是什么让它更好(如果是).

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

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

@H_403_2@谢谢,
马修

解决方法

Doctrine是一个完整的ORM,它实现了活动记录模式. CodeIgniter的活动记录类是一个查询构建器/数据库包装器,它基于模式的“修改”版本. @H_403_2@免责声明:我从未使用过Doctrine.根据我的理解,我将尽力说明CodeIgniter的活动记录实现与Doctrine之间的区别.

@H_403_2@使用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();
    }

    // ...

}
@H_403_2@您基本上使用活动记录方法构建查询.很容易看出每个方法(where(),get()等)如何映射到原始sql.使用活动记录方法而不仅仅是$this-> db-> query()的优点是CodeIgniter根据您使用的数据库驱动程序编译每个查询.除此之外,CodeIgniter的主动记录实现并没有真正做多少.您需要创建所需的任何查询.我希望我已经说明了活动记录方法查询构建器的相似之处.

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

/** @Entity */
class User
{

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

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

    // ...

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

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

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

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

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

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

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

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

猜你在找的MsSQL相关文章