我正在使用 symfony 开始一个新项目很容易与 Doctrine 集成和 Propel ,但我当然需要做出选择....
非常感谢。
编辑: 感谢所有回复,有用的东西。这个问题没有真正正确的答案,所以我只会将获得最多票数的答案标记为已批准。
最佳答案
我会选择 Doctrine。在我看来,这是一个更加活跃的项目,并且作为 symfony 的默认 ORM,它得到了更好的支持(尽管官方认为 ORM 是平等的)。
此外,我更喜欢您使用查询的方式(DQL 而不是 Criteria):
<?php
// Propel
$c = new Criteria();
$c->add(ExamplePeer::ID, 20);
$items = ExamplePeer::doSelectJoinFoobar($c);
// Doctrine
$items = Doctrine_Query::create()
->from('Example e')
->leftJoin('e.Foobar')
->where('e.id = ?', 20)
->execute();
?>
(Doctrine 的实现对我来说更直观)。
另外,我真的更喜欢你在 Doctrine 中管理关系的方式。
我认为 Doctrine 文档中的这一页值得一读:http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained
总结一下:如果我要开始一个新项目,或者必须在学习 Doctrine 和 Propel 之间做出选择,我会随时选择 Doctrine。
关于PHP ORMs : Doctrine vs. 推进,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2062473/
我使用JAXB通过XMLStreamReader从非常大的XML文件中解码对象。如果我要解码的XML元素是分开的(用换行符或什至一个空格),这就可以正常工作。如果我正在解码的XML元素之间没有空格,我会丢失所有其他项目-XML阅读器似乎会在解码的元素之后吞下该元素。演示这一点的简化可运行示例的源代码位于https://gist.github.com/dalelane/88df784c3cb74b214d5c。有趣的部分是:XMLStreamReaderreader=XMLInputFactory.newInstance().createXMLStreamReader(inputStre
4月28日,西北政法大学法治与科技发展研究室杨锦帆主任等领导到访秦储总部座谈交流,西安市区块链技术应用协会檀敏会长、秦储CEO李伟鹏先生、蚂蚁集群CEO杜鹏先生等代表陪同参观交流。座谈会参会人员: 杨锦帆 西北政法大学法治与科技发展研究室主任国瀚文 西北政法大学法治与科技发展研究室研究员李佳飞 西北政法大学法治与科技发展研究室研究员赵 敏 西北政法大学法治与科技发展研究室研究员朱战辉 西北政法大学法治与科技发展研究室研究员张夏恒 西北政法大学商学院副教授张永林 西北政法大学法治与社会治理研究室研究员刘 昊 西北政法大学法治与科技发展研究室研究助理在本次走访交流中,杨锦帆主任等
我希望能够通过按Windows窗体中的按钮来浏览Powerpoint演示文稿。这是我从http://bytes.com/topic/c-sharp/answers/272940-open-powerpoint-presentation-c-window-form中找到的一些代码打开Powerpoint演示文稿幻灯片放映:Microsoft.Office.Interop.PowerPoint.ApplicationoPPT;Microsoft.Office.Interop.PowerPoint.PresentationsobjPresSet;Microsoft.Office.Intero
我有一个使用自动递增主键的表,它有几个字段。我想确保field1+field2组合不会被多次使用,所以除了id之外,我还添加了它们作为主键,但是当我尝试使用findPK()时,这会产生问题。我宁愿有一个自动递增的id作为主键,但我也想确保组合field1+field2没有输入超过一次。 最佳答案 尝试在这些字段上设置唯一索引,例如:根据propeldoc 关于php-主键+复合主键导致推进数据库模式出现问题,我们在StackOverflow上找到一个类似的问题:
我修改了我的数据库和一些fk关系。重建架构和重建类后,我在尝试使用该类时收到错误消息Fatalerror:CannotredeclareBaseHrlibQualificationLevelQuery::filterByHrlibQualification()inC:\wamp\www\cbm_hr\trunk\cbm\plugins\cbmHrLibPlugin\lib\model\om\BaseHrlibQualificationLevelQuery.phponline717我检查了架构,但同一个表中没有多个列。还有哪些事情会导致函数的多次声明? 最佳答
我如何在Propel中根据连接表的列进行过滤?喜欢:$results=FooQuery::create()->joinBar()->filterByBarSurname('surname'); 最佳答案 您必须使用use方法,如inthedoc所述:$results=FooQuery::create()->useBarQuery()->filterBySurname('surname')->endUse()->find();//exampleQuerygeneratedforaMySQLdatabase$query='SELECTf
我有一个数组,其中的数字递增键从0开始,例如012345....etc。我需要按以下方式为数组分配新键前三个键保持索引号每第4个键递增4第四个键之后的两个键再次递增1我知道我需要使用foreach循环(这似乎是最简单的方法)来使用新分配的键构建一个新数组。我的问题是key的计算这是我所看到的关系这是我当前的数组键0123456789101112131415这就是我希望他们成为的样子01267812131418192024252630让我们将其分解为3个键组,旧数组键在顶部,新数组键在底部第一组012012第二组345678第三组678121314第四组91011181920等等等等..
我正在尝试获取propel中列的总和。我的代码$c=newCriteria();$c->add(valuePeer::OWNER_ID,$this->getId());$c->addSelectColumn('SUM('.valuePeer::VALUE.')astotal');$c->addGroupByColumn(valuePeer::VALUE);$sum=valuePeer::DoSelect($c);打印出$sum什么都不返回(甚至不是一个空对象)。我得到的只是Notice:Undefinedoffset:1in/.../lib/model/om/BaseValue.php
假设我有一个封装标准容器的类:classStash{listData;public:list::const_iteratorGetAccess()const{returnData.begin();}};这是强制用户以迭代器的形式读取数据的一种非常方便的方式。但是,除了将迭代器与container.end()进行比较之外,我找不到其他方法。所以,我想知道是否可以选择仅通过stdlib来完成,或者我必须自己编写迭代器类(例如,使用can_advance方法)。相关问题可能是thisone,但它会询问迭代器是否有效,而不是它是否可以前进。我找不到有关后者的任何信息。
当C++标准说迭代器不是“无效的”时,这仅仅是指取消引用的能力,还是也暗示了遍历能力?例如,如果swap/insert/etc.一个容器保证不会使任何迭代器失效,这个事实单独是否意味着它也保证推进一个旧的迭代器也是有效的?如果是这样,是否保证它会按照与新迭代器相同的顺序遍历元素?(我在这里问的是传统/“遗留”迭代器,尽管如果新样式有任何差异,那么提及这一点当然也会有所帮助。) 最佳答案 "WhentheC++standardsaysthataniteratorisnot"invalidated",isthatmerelyreferr