Doctrine DBAL 可以与 ORM Query Builder 混合使用吗?

Posted

技术标签:

【中文标题】Doctrine DBAL 可以与 ORM Query Builder 混合使用吗?【英文标题】:Can Doctrine DBAL be mixed with ORM Query Builder? 【发布时间】:2016-10-11 01:12:38 【问题描述】:

我正在尝试使用 ORM 创建一个查询构建器。但是我偶然发现了一个实体上的一个字段,该字段与两个可能的表有关系。使用这种结构,(恕我直言)不可能将其映射到实体本身。

╔═══════╗      ╔═══════╗       ╔═══════╗
║ ValB  ║      ║ Main  ║       ║ ValC  ║
╠══╦════╣      ╠══╦════╣       ╠══╦════╣
║ *║ pk ║-- +  ║ *║ pk ║   +---║ *║ pk ║
╠══╬════╣   |  ╠══╬════╣   |   ╠══╬════╣
║  ║    ║   +--║  ║v_id║---+   ║  ║    ║
╠══╬════╣      ╠══╬════╣       ╠══╬════╣
║  ║    ║      ║  ║    ║       ║  ║    ║
╚══╩════╝      ╚══╩════╝       ╚══╩════╝

可以将 DBAL QueryBuilder 与 ORM QueryBuilder 或任何其他仍主要在代码上使用 ORM QueryBuilder 的方式混合使用。

PS。我没有设计数据库,我只是优化它。对此感到抱歉:(

【问题讨论】:

【参考方案1】:

不,这没有意义,因为以后的 ORM 必须将结果映射到对象。您不能将 ValBValC 都映射到 Main 中的同一属性

要正确执行此操作,Main 表中应该有单独的字段用于 ValBValC 关系。即使它们具有相同的值。像这样

╔═══════╗      ╔════════╗       ╔═══════╗
║ ValB  ║      ║ Main   ║       ║ ValC  ║
╠══╦════╣      ╠══╦═════╣       ╠══╦════╣
║ *║ pk ║-- +  ║ *║ pk  ║   +---║ *║ pk ║
╠══╬════╣   |  ╠══╬═════╣   |   ╠══╬════╣
║  ║    ║   +--║  ║vB_id║   |   ║  ║    ║
╠══╬════╣      ╠══╬═════╣   |   ╠══╬════╣
║  ║    ║      ║  ║vC_id║---+   ║  ║    ║
╚══╩════╝      ╚══╩═════╝       ╚══╩════╝

您可以复制v_id 列,然后在Doctrine 中进行适当的映射。

【讨论】:

是的,我知道那个解决方案,但是有没有办法不诉诸于创建另一个表?因为我们正在生产中,迁移到这个结构中非常乏味和危险.. 我了解您的问题。但不是。您可能只需要在此处使用 DBAL。 谢谢你的回答启发了我。我只是在想也许有一种方法可以动态映射实体。但我认为没有办法。谢谢! :) 等一下。也许你可以试试这个:doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/…我从来没有试过,但看起来不错。 看起来这是我要找的那个 :) 还没有听说过,但肯定看起来像我的解决方案 :) 谢谢!!生病试试这个。顺便说一句,您应该将其添加到您的答案中..

以上是关于Doctrine DBAL 可以与 ORM Query Builder 混合使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine DBAL 参数不起作用

Doctrine DBAL、diff 命令和枚举类型

如何在我的 symfony 项目中将 SQL Server 与 ORM Doctrine 连接起来?

与 PHP PDO 相比,Doctrine DBAL 中的错误处理

使用多个时自动连接特定的 DBAL 连接

在作曲家 laravel 上安装依赖项(doctrine/dbal)