php sql好处,关于php:使用Doctrine与SQL相比,使用DQL有什么好处?

当在使用Doctrine类时需要自定义查询时,有人可以为我提供一些明确的理由(支持事实)来使用/学习DQL与SQL吗?

我发现,如果无法使用ORM的内置关系功能来实现某些目标,通常会在扩展的Doctrine或DoctrineTable类中编写自定义方法。在这种方法中,用直接的SQL编写所需的代码(使用带有适当准备好的语句/注入保护的PDO等)。 DQL似乎是一种似乎无法学习/调试/维护的其他语言,它提供了足够的令人信服的理由来在大多数常见情况下使用。 DQL似乎并没有比SQL复杂得多,因此可以保证使用它-实际上,我怀疑您是否可以在没有扎实的SQL理解的情况下有效地使用DQL。在将与PHP一起使用的最常见数据库中,大多数核心SQL语法端口都相当不错。

我想念/忽略什么?我敢肯定有一个原因,但是我想听听那些有意大量使用它的人的消息,以及尝试使用纯OLE SQL带来的收益。

我不是在寻找支持ORM的参数,只是在传统的LAMP设置(使用mysql,postgres等)中需要执行核心"按关系获取"类型需求时执行的DQL。

我没有事实支持的参数,但是我发现名称关系比连接条件更易于使用,出错的几率更低,编写起来也很乏味。

老实说,我使用Doctrine1.2学习了SQL :)我什至不知道外键,级联操作,诸如group_concat之类的复杂功能以及许多其他东西。索引搜索也非常好用,可以直接使用。

DQL更加容易编写和理解代码。例如,此查询:

$query = ..... // some query for Categories

->leftJoin("c.Products p")

它将在类别和产品之间进行左连接,而您不必在p.category_id = c.id上写。

而且,如果将来您将关系从一个2到许多更改为很多2,那么这个查询将可以正常工作。教义将对此予以照顾。如果要使用SQL进行此操作,则必须更改所有查询以包括该中间多2多次表。

+1,尤其是对象之间的关系(外键)已在Base类中连接

Ive收到的回复中的@Zeljko,关于改变人际关系类型的答案中的最后一点是我所遇到的唯一令人信服的问题。我不太关心为什么它对那些不了解关系型数据库如何工作的人有益-从长远来看,对初学者来说并不总是最好的。另外,由于您注意到ON子句...有时您希望在ON子句中添加除键之外的其他条件-据我所知DQL不支持该条件。那是您需要完成的大多数工作的简单示例,但是在某些情况下却很难使用。

没错,您将有其他条款。对于这种情况,DQL提供了WITH语句。是的;一个人也可以与一对一,一对一,一对二,很多,许多二,许多...一起工作,而无需更改代码。我的建议:尝试一下。一旦上钩,就再也回不去了。就像驾驶顶级梅赛德斯车队与最底层的Yugo车队一样。两者都会把你从A点带到B点,但是我看不到Yugo形成的线。

@Zeljko,对我来说,这是比较错误的比较。 :)我从来没有说过,与普通的旧SQL相比,使用DQL可以实现更多或更多的稳定结果,或者更加轻松。也许是出于一些基本需求。它更多地是自动和手动档之间的比较。

我发现DQL更具可读性和方便性。如果正确配置,连接对象将更容易,查询也将更容易编写。

您的代码将很容易迁移到任何RDBMS。

最重要的是,DQL是对象模型而不是关系模式的对象查询语言。

我认为您的第一个是定性的-我已经看过真正复杂的DQL来完成简单的SQL查询可以解决的任务。您的第二点我完全同意,但是正如我的问题中所指出的,它不涉及实现DQL可以完成的所有工作所需的基本SQL。最后一点是最令人信服的方式。好的,它是对象而不是基础存储的查询语言。什么是对象查询语言的核心优势?它会提高性能吗?它是否支持经过严格审查的OO模式?它允许更有效/更好的代码吗?

@Ray在使用Doctrine 1.2之后,对性能确实有害。

你们有什么参考资料来理解教义生成的模型类(TestTable,BastTest,Test),以及如何正确处理它们,在控制器中调用谁?你能拜访我的问题stackoverflow.com/questions/11529224/

Zeljko的答案很明确。

使用DQL而不是原始SQL的最重要原因(在我的书中):Doctrine将实体与实体在数据库中的保存方式分开,这意味着实体不必随着基础存储的更改而更改。反过来,这意味着,如果您希望对基础存储进行更改(即重命名列,更改关系),则无需触摸DQL,因为在DQL中,您使用实体属性代替(这只会发生根据您的当前映射在幕后翻译以更正SQL)。

在过去一个月开发了一个应用程序并对数据库进行了许多更改之后,我同意这个答案。

使用DQL可帮助您处理对象。

万一插入到databae中,您将插入一个Object

$test = new Test();

$test->attr = 'test';

$test->save();

如果从数据库中选择,则将选择一个数组,然后将其填充到对象中

public function getTestParam($testParam)

{

$q=Doctrine_Query::create()

->select('t.test_id , t.attr')

->from('Test t ')

$p = $q->execute();

return $p;

}

您可以查看教义文档以获取更多详细信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/500577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我写的博客居然是百度搜索第一名 - 感谢国家 …

http://www.baidu.com/s?bs%BD%E1%BB%E9%C2%BC%CF%F1%BA%CD%CF%E0%B2%E1%BC%AF&f8&wd%CE%D2%BA%CD%CB%FB%B5%C4%BD%E1%BB%E9%C2%BC%CF%F1%BA%CD%CF%E0%B2%E1%BC%AF 而且这个“结婚录像和相册集”还在传播中, 刚刚看到 Tao Mei 同学也在他的space 中加上了。…

CSDN 首页的第一屏 广告/新闻 比率 = 40 : 2

有一天我不小心开了 www.csdn.net, 定睛端详许久, 我只看到 2 条新闻 (连线杂志 和 金山震荡) 。 其他的除了两行导航条,都是广告 (导航条下面的那一行看似第三条导航条,其实也是广告)。 其中右下角的窗口上有六个广…

php 跳板机连接mysql,使用python如何通过跳板机连接MySQL数据库

生产环境中,为了安全起见,大多数的数据库是无法在本地直接访问的,需要先连接跳板机,然后通过跳板机访问。创业天下测试数据库也是采用这种方法连接数据的,那么我们应该怎么通过Python去连接数据库呢,代码如…

2010 北大软件及微电子学院 《软件实现技术》小组博客

请各小组在live space上以组为单位建立博客,并加教师博客为好友,然后在这篇日志下面回复小组博客地址。谢谢

去 QCon 学习

他山之石,可以攻玉。就看你的项目有多少“玉”的成分,究竟敢不敢用“石”来攻。 QCon Beijing 2010 | 全球企业开发大会(北京站) 大会:4 月23 日~4 月25 日;培训:4 月21 日~4 月22 日 大会地点…

oracle merge 效率慢,更新语句的效率比较(merge into )

昨晚更新了一批数据,用update的老办法耗时20多分,而用 merge into 不到2秒结束,效率真是天壤之别。具体见下:用T_TMP_SCHOOL(135868行)的BIRTH 字段更新T_TMP_NT_CUSTOMERDETAIL( 763119行) 的BIRTHDATE 字段,连接条件…

first review of team blog(4.26)

team score team1 10team2 0team3 0team4 0team5 0team6 9team7 0team8 0team9 0team10 0

精准营销联系oracle,正确打开精准营销:用营销自动化技术发挥数据价值

正确打开精准营销:用营销自动化技术发挥数据价值甲骨文认为,以”数据优先”之道来管理客户体验,是让每一次客户互动都能真正发挥价值的重要方式。但是,当前复杂的商业环境瞬息万变,无可避免地直接影响着企业的营销战略…

Homework2-project review score of each team

team score Team19Team28Team34Team44Team515Team65Team77Team83Team96Team102

php ignore special characters,PHP忽略第5个字符?(PHP ignore 5th character?)

PHP忽略第5个字符?(PHP ignore 5th character?)我有一个简单的PHP问题。在我的PHP中 ,我有这个:$variable howareyou;有可能以某种方式修改代码,因此它只计算变量的第6个字符?所以之后,当回声它会说怎么代…

Requirements of pair programming

题目:围棋棋谱的特征搜索说明:将用户的棋盘输入作为特征,在棋谱包中读取SGF棋谱,找出特征相符的棋谱。注:不仅要考虑棋子的位置,还要考虑走棋的顺序。对找出的棋谱按照符合程度排序。实现为桌面程序&#x…

php5.4环境升级,CentOS环境中编译升级PHP至5.4版本记录

先备份mv /data/server/php /data/server/php.5.2mv /etc/init.d/php-fpm /etc/init.d/php-fpm.5.2编译源码首先先执行./buildconf --force,为了防止出现 cp:cannot stat ‘sapi/cli/php.1‘: No such file or directory./buildconf --force./configure --prefix/d…

各小组对于自己产品的预期“软件下载/用户人数”

组号 预期下载/用户人数Team1 100Team2 1000Team3 30下载,20篇博客引用Team4 1000Team5 3000Team6 100Team7 600Team8 1000下载,50个搜索结果引用Team9 300Team10 500在产品发布之后,再比照这个期望值&…

电脑系统linux怎么读,Linux怎么读

Linux怎么读Linux是一种操作系统,不过很多朋友都不知道Linux怎么读?Linux正确读法 “哩呐克斯”,音标:[li:nэks] 重音在“哩”上。由于大多数的电脑都是安装Windows,其实也可以安装Linux,不过大家都习惯了Windwos&am…

各个团队的项目评价

Team 10 – Voice Mail 该软件项目构想/计划/实现/创新等方面的优劣: 构想和计划 1. 设计思路清晰,设计说明和文档较全 2. 多种人机交互方式,所以该项目亮点之处就在于其人机交互 实现 3. 设计良好的UI 4. 下载安装Windows XP版本的软…

linux7端口聚合,centos7配置链路聚合

配置链路聚合的目的:冗余、负载均衡假如需要做链路聚合的2块网卡为eth1和eth2man nmcli-examples搜索模板Example 7(这是active/backup模式,一般round robin模式用的最多。)$ nmcli con add type team con-name Team1 ifname Team1 config team1-master-…

linux 日志切割 自带,[日志分割回滚] 使用linux自带的logrotate对nginx日志进行分割...

logrotate日志分割配置:# cat /etc/logrotate.d/nginx/data/nginx_logs/*.access_log #nginx日志所在目录{nocompress #不对日志文件进行转储压缩daily #…

大家都纷纷指出了 wp7 的优点 …

http://www.windowsphone7.com/ Windows Phone 7 终于快要和大家见面了! 下面是各路人士对它的评价: Gizmodo says its a neat, fresh start. CNET thinks the hub system is wonderful SlashGear says this is Microsofts attempt to justify its existence in …

Meeters and Greeters 接客大厅

在上海虹桥机场看到了这个标记 – “接客大厅”。 英库和有关单位最近搞了 “雷人英语” http://engkoo.msn.cn/expo/ 活动, 旨在消灭上海和周边地区的“土产英语”, 这个 “Meeters & Greeters Hall” 英语真是 “顶风作案”, 谁这么大胆? “接客大厅” 在祖国大…

旅游去

September 30 旅游指南新版上线! http://travel.msra.cn http://travel.msra.cn 1. 全新搜索体验 2.旅游目的地推荐 3.全球旅游地支持 4.旅游计划功能 5.丰富的旅游资讯