PHP ORM框架Propel VS Doctrine

本文对比了PHP领域的两大ORM框架Propel与Doctrine,包括基本特性、文档、使用方法及性能等方面的差异。通过具体示例说明了两者在条件查询方面的不同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

认识ORM其实最早源自一场争论,各个框架都声称具备良好的ORM实现,但是使 用后发现,如果仅仅是强制返回数据对象还声称自己是ORM的话,那就贻笑大方了。那只能说是伪ORM或是ORA(array)而已。很显然返回的对象除了 属性值外,还应该包括可执行方法,实现对数据的操作运用。

后来工作改用symfony 框架,该框架内置了对ORM框架PropelDoctrine 的 支持,symfony 1.2.*以前是采用propel作为默认ORM框架,symfony 1.3以后官方将默认ORM框架改为Doctrine。当然实际运用你可以自由切换,你也可以不用symfony直接在开发中采用Propel或 Doctrine。一番PK,最终在项目中采用了Doctrine作为默认ORM框架。

以下将对Propel和Doctrine的异同做一个简单对比,欢迎拍砖……

基本特性:
1)两者只需简单设置即可应用,支持常用CRUD操作;
2)两者均支持自动生成model,每个表生成两个model文件,也支持从原有数据库生成model;有些数据库数据类型转过来的属性类型可能不是完全一样,是一个最接近的类型;
3)支持数据有效验证和定义model关系;
4)支持单表继承,支持字段自动赋值;
5)支持主从复制;
6)Doctrine支持全文搜索

文档:
Doctrine的文档一直就比Propel要全面丰富,社区更活跃

使用方法:
Propel和Doctrine基本CRUD操作很类似,但是涉及条件操作时区别就比较大了
1)propel查询:
$criteria = new Criteria( ) ;
$criteria ->add ( JobeetJobPeer::CREATED_AT , time ( ) - 86400 * 30 , Criteria::GREATER_THAN ) ;
$this ->jobeet_job_list = JobeetJobPeer::doSelect ( $criteria ) ;

2)doctrine查询:
$result = Doctrine_Query::create()->from("User")->where("name = 'caleng'")->excute();

明显可以看出Doctrine的连贯写法更加自然、更易阅读、更接近原生SQL。

性能:
Doctrine > Propel

关键字:orm、symfonydoctrinepropel

自主封装的PHP ORM框架,面向对象的PDO数据库操作,API框架,支持Get/Post/Put/Delete多种请求方式。 代码示例: <?php use Models\User; require '../application.php'; require '../loader-api.php'; //适合查询,如:获取用户列表或者单个用户信息 execute_request(HttpRequestMethod::Get, function() { $action = request_action(); //判断是否存在 if ($action == 1) { list($type, $value) = filter_request(array( request_int('type', 1, 2, 3), //1.用户名 2.邮箱 3.手机号 request_string('value'))); $type_field_map = array( 1 => User::$field_username, 2 => User::$field_email, 3 => User::$field_phone ); if ($type == 2 && !is_email($value) || $type == 3 && !is_mobilephone($value)) { die_error(USER_ERROR, $type_field_map[$type]['name'] . '格式无效'); } $user = new User(); $user->set_where_and($type_field_map[$type], SqlOperator::Equals, $value); $result = $user->exists(create_pdo()); echo_result($result ? 1 : 0); //存在返回1,不存在返回0 } //查询单条信息 if ($action == 2) { list($userid) = filter_request(array( request_userid())); //查询单条数据 $user = new User($userid); //set_query_fields可以指定查询字段,下面两种写法均可 //$user->set_query_fields('userid, username, email'); //$user->set_query_fields(array(User::$field_userid, User::$field_username, User::$field_email)); //还可设置where条件进行查询 //$user->set_where_and(User::$field_status, SqlOperator::Equals, 3); //$user->set_where_and(User::$field_truename, SqlOperator::IsNullOrEmpty); //$user->set_where_and(User::$field_age, SqlOperator::In, array(27, 29)); //$user->set_where_and(User::$field_regtime, SqlOperator::LessThan, '-6 month'); //创建数据库连接 $db = create_pdo(); $result = $user->load($db, $user); //也可以用Model类的静态方法 //$result = Model::load_model($db, $user, $user); if (!$result[0]) die_error(PDO_ERROR_CODE, '获取用户信息时数据库错误'); if (!$user) di
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值