您好,匿名用户
随意问技术百科期待您的加入

改用symfony2.0开发项目,想提点问题

0 投票

我之前用symfony1.4+propel开发项目,现在改用symfony2.0了,但没用过doctrine,但官方默认doctrine并去掉propel了。
1.使用doctrine有什么优势呢?相对于propel来说。项目是系统方面。
2.用propel时,发现group by 不是很好用,是吗?
3.doctrine应对多对多M:N关系时,处理得如何?

另外,我贴出doctrine可能出现的问题,我是参考别人的:
1.文档错误,要用options配置字段额外选项,比如 unsigned、default属性,官方文档、生成的yml都是直接在字段上指定。
2.外键无法指定unsigned、default
3.表关系是non-identifying relationship

感谢!

用户头像 提问 2012年 12月1日 @ Gragas 上等兵 (254 威望)
分享到:

1个回答

+1 投票
 
最佳答案

“标准的”Doctrine所支持的功能,是PDO所支持的各关系型数据库(MySQL,PostgrelSql等)都具备的功能的集合,也就是说,所有A支持而B不支持的,Doctrine默认都不包含,但Doctrine有良好的扩展性和丰富的第三方代码,Baidu里怎么搜不知道,Google里搜Doctrine+Extensions,会有很多收获。

Doctrine多对多的支持还不错,够用。

在Symfony 2里你还是可以用Propel,官网上文档里有专门的一章。

Doctrine和Propel都不错(自己写数据库封装,也可以是好同志),各选各好吧,非要比较的话,可以举一些客观的区别:

  1. Doctrine是Data Mapper+Proxy模式,Propel是Active Record模式(这是个哲学问题);
  2. Doctrine的社区更活跃;
  3. Symfony 2使用Doctrine的Common库来实现的基于注解(annotation)的依赖注入(DI);
  4. Doctrine更现代一些(2.x),对PHP 5.3+的特性支持更好,但Propel也在赶上。

如前述,你所说的unsigned,这个特性不能跨数据库,自然也就没有被默认支持,但如果需要,办法很多,不在此答案中罗嗦。

default也不是能跨数据库的属性,但你可以在Doctrine的Entity类里,为做了映射的成员变量,定义一个默认值就可以了,夫复何求?

Doctrine的承诺就是跨库通用,我认为好的代码就是只做自己承诺的事,从这一点出发,Doctrine还是可以让人放心的。毕竟还有很多人在用PostgreSql或者SQLite,不要用MySQL的思维去强求一致。

用户头像 回复 2012年 12月1日 @ Amumu 上等兵 (340 威望)
选中 2012年 12月1日 @Gragas
提一个问题:

相关问题

0 投票
1 回复 35 阅读
0 投票
1 回复 27 阅读
用户头像 提问 2014年 1月2日 @ Skarner 上等兵 (193 威望)
0 投票
1 回复 214 阅读
0 投票
1 回复 35 阅读
0 投票
1 回复 72 阅读
用户头像 提问 2012年 12月1日 @ Swain 上等兵 (232 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...