Php 什么';你对ORM有什么经验?

Php 什么';你对ORM有什么经验?,php,orm,doctrine-orm,doctrine,phpactiverecord,Php,Orm,Doctrine Orm,Doctrine,Phpactiverecord,你在这方面有什么经验? 我从来不是什么ORM类型的人,我通常只使用一些基本的数据库抽象层,比如adodb 但我理解它的所有概念和好处。所以,当一个需要ORM的项目出现时,我想我应该尝试一下ORM框架 我必须在条令和推进之间做出决定,所以我选择条令,因为我不想处理phing要求 我不知道我做错了什么。我是带着正确的心态进来的。我决不是一个“少年”php小孩。但我一直在与体制斗争。有很多文档,但都感觉有点混乱。而像YAML到db表创建这样的简单事情就不会发生;我不能工作,只是毫无差错地工作。很多其他

你在这方面有什么经验? 我从来不是什么ORM类型的人,我通常只使用一些基本的数据库抽象层,比如adodb

但我理解它的所有概念和好处。所以,当一个需要ORM的项目出现时,我想我应该尝试一下ORM框架

我必须在条令和推进之间做出决定,所以我选择条令,因为我不想处理phing要求

我不知道我做错了什么。我是带着正确的心态进来的。我决不是一个“少年”php小孩。但我一直在与体制斗争。有很多文档,但都感觉有点混乱。而像YAML到db表创建这样的简单事情就不会发生;我不能工作,只是毫无差错地工作。很多其他的东西工作起来有点怪,只需要在工作前做一些额外的调整

也许我在这里做了一些愚蠢的新手假设,一旦我发现它是什么,我会有一个惊喜的时刻。但现在我完全讨厌这个系统


有没有人可以给我一些建议,或者给我指出一个关于这个主题的好资源,或者一些权威的网站/人?或者只是推荐另一个“只起作用”的ORM框架?

我不是信条专家-我自己刚开始使用它,我不得不承认这是一个混合的体验。它对你有很多帮助,但如何告诉它这样或那样做并不总是显而易见的

例如,当尝试在自动关系发现中使用YAML文件时,多对多关系没有正确地转换为php模型定义。正如您所提到的,没有错误,因为它根本没有将其视为多对多


我想说的是,你可能需要时间来思考这种或那种做事方式,以及各种因素如何相互作用。有时间一步一步地做事是一件好事,并以一种孤立的方式一步一步地处理问题。试图一次做太多事情可能会让人难以承受,也可能会让人难以接受呃,实际上是为了找到哪里出了问题。

我在一个中型项目中使用了条令,在这个项目中,我必须从我不拥有的现有数据库中工作。它提供了许多内置功能,但我有一个主要的抱怨

由于我必须从数据库中生成模型,而不是从数据库中生成模型,因此我的模型与数据库太接近:字段的名称与数据库列非常相似,要获取对象,您必须在什么是基本sql中进行查询(我把代码放在哪里,如何测试它?),等等


最后,我不得不为条令编写一个复杂的包装,这让我怀疑,如果仅仅使用旧的dao/模型方法,将条令排除在外,是否会更容易。陪审团仍在讨论这个问题。祝你好运!

我们使用Propel和Symfony已经两年了,而使用Dopect和Symfony已经有一年多了。我可以说使用MVC框架迁移到ORM是我们迈出的最好的一步。我建议坚持原则,尽管学习如何使用它需要一些时间。最终你会发现你的代码更具可读性和灵活性

如果你正在寻找一个开始的地方,我推荐Symfony Jobeet教程(第3章、第6章介绍了基础知识),当然还有条令文档


正如我在上面所写的,我们使用Doctrine已经有一段时间了。为了让我们的工作更舒适,我们开发了一个名为ORM Designer(www.ORM-Designer.com)的工具,您可以在图形用户界面中定义DB模型(不再需要YAML文件:-)你也可以在那里找到一些有用的教程。

我的经历听起来和你的很相似。我刚刚开始使用条令,从未使用过推进。但是我对条令非常失望。它的文档很糟糕。组织得很差,而且很不完整。

我的感觉很复杂。我是一个桅杆只是因为SQL很容易验证,所以可以快速测试SELECT语句,直到得到正确的结果。而重构非常简单

在Doctorine或任何ORM中,有如此多的抽象层,几乎看起来像是强迫症(强迫性/强迫性)。在我最近的项目中,我尝试了条令,我撞了好几面墙。我花了几天时间才找到一个解决方案,我知道我可以在几分钟内用SQL编写。这太令人沮丧了

我有点暴躁。SQL的社区很大。对条令的社区/支持很小。当然你可以看看源代码并尝试找出它…这些问题需要几天才能解决


一句话:不要在没有计划大量时间独自摸索的情况下尝试Doctrine或任何ORM。

Propel和Doctrine使用PDO。PDO在Oracle数据库中有许多开放的bug。所有这些bug都与CLOB字段有关。如果您正在与Oracle合作,请在启动新项目之前记住这一点。这些bug是开放的e年前。Doctrine和PDO将崩溃与Oracle和CLOB的合作

在对PHP的各种ORM库进行了一些研究之后,我决定使用PHP ActiveRecord(请参阅)。我的决定归结为几乎没有配置,库的轻量级性质,以及缺少代码生成。条令对于我的需要来说太强大了;PHP ActiveRecord做不到的事情我可以在我的包装层中实现。我建议花点时间检查一下ORM中的需求,看看像PHP ActiveRecord这样的简单应用程序提供了您所需要的,或者如果一个自制的ActiveRecord实现会更好。

我认为mtbikemike完美地总结了这一点:“我花了好几天的时间才找到一个解决方案,我知道我可以在几分钟内用SQL编写。”这也是我的经历。悲哀(缓慢的应用程序开发)是guar
SELECT i, p            
FROM \Entity\Item i
JOIN i.product p
WHERE ...
//SELECT i, p
$ret[0]->getProduct()->getModel();          

//SELECT i as item, p as product
$ret[0]['item']->getProduct()->getModel();  

//SELECT i as item, p.model as model
$ret[0]['model'];                           
     public function countNumberPrintedForCategory(Category $category)
    {
        $conn = $this->getEntityManager()
            ->getConnection();
        $sql = '
            SELECT SUM(fc.numberPrinted) as fortunesPrinted, AVG(fc.numberPrinted) as fortunesAverage, cat.name
            FROM fortune_cookie fc
            INNER JOIN category cat ON cat.id = fc.category_id
            WHERE fc.category_id = :category
            ';
        $stmt = $conn->prepare($sql);
        $stmt->execute(array('category' => $category->getId()));
        return $stmt->fetch();
... lines 30 - 37
    }