你对Doctrine ORM有什么经验?

32

你对doctrine有什么经验?我不太喜欢ORM,通常只使用基本的db抽象层,例如adodb。

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

我必须在doctrine和propel之间做出决定,所以我选择了doctrine,因为我不想处理phing要求。

我不知道我做错了什么。我以正确的心态进入。而且我绝不是“初级”php小子。但我一直在与系统作斗争。有很多文档,但感觉都有点杂乱。像YAML到db表创建这样的简单东西就无法工作,甚至没有错误或任何提示。许多其他东西需要调整才能正常工作。

也许我在这里犯了一些愚蠢的新手假设,一旦我找出来它是什么,我就会有“啊哈”时刻。但现在我完全讨厌这个系统。

是否有人可以给出一些提示,或者指向有关此主题的良好资源,或者一些权威的网站/人士?或者只是推荐另一个ORM框架,可以“只需工作”?


13
哇塞!一个古老而发人深省的问题,有成千上万的浏览量和数十个回答,却没有被“无生产力问题”群体关闭!满分! - Theodore R. Smith
他们最终还是追上了它,只是花了一些时间。 - Dennis
@TheodoreR.Smith提出的“发人深省的问题”和标题中所述的“你的经验”都完全描述了根据Stack Overflow模型所不希望的东西。我同意这很有趣,也很好玩,但是如果没有主观性,就无法回答,因此可能会给出潜在的不良建议。 - James
对我来说,这往往是不直观/违反常理的,过于复杂,并且解释不清。我发现文档只提供了一些关于简单用法的基本解释,比如在函数使用中指定变量而没有描述这些变量或其可行格式可能是什么,然后让我猜测我可以做什么,即使它可能非常强大和灵活。这意味着我不得不进行试错或跟踪供应商代码。文档不应该让我做这两件事情,它们应该是完全可选和补充的。即便如此,它可能描述不足,这就是我现在的困境。 - SteveExdia
12个回答

3

我不是Doctrine的专家-刚开始使用它,必须承认这是一种有点混合体验的技术。它可以为您完成很多工作,但如何告诉它执行此操作或那个操作并不总是显而易见。

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

我想说的是,您可能需要时间来理解某种做事方式以及元素之间如何相互作用。逐步进行事情并逐步处理问题可能是一个好方法,以隔离的方式一次处理一个问题。尝试一次性做太多事情可能会让人不知所措,并可能使查找错误的位置更加困难。


0

目前我正在使用Symfony框架和Doctrine ORM,那么如何将Doctrine与纯查询一起使用呢? 例如,从knpuniversity,我可以创建自定义存储库方法:

     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
    }

我只是使用Doctrine实体来创建和处理表单,当我需要更复杂的查询时,我只需编写简单的语句并获取所需的值。从这个例子中,我还可以将实体作为变量传递,并获取它的值以进行查询。我认为这个解决方案易于理解,而且构建表单、传递数据以及编写复杂的查询所需的时间也比使用Doctrine编写要少。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接