学说 ORM 条件关联

2023-12-20

我正在建立一个问答网站,我的问题、答案和评论都在同一个网站上posts桌子。但他们的postType是不同的。我可以通过该协会获得问题的答案和答案的评论:

/**
 * @OneToMany(targetEntity="Cms\Entity\Post", mappedBy="parent")
 */
private $answers;

/**
 * @OneToMany(targetEntity="Cms\Entity\Post", mappedBy="parent")
 */
private $comments;

但我认为这不是正确的方法,因为如果我获取一个问题,答案和评论都会充满答案。我必须为关系设置一个条件,例如postType = 1

我怎样才能做到这一点?


您的架构无效。您应该有两个不同的对象用于答案和评论,因为它们是两个不同的东西,即使它们共享一个公共接口。

您应该创建两个实体,Answer and Comment并为它们创建关联。因为它们几乎是相同的东西,你可以创建一个抽象类,AbstractContent,它定义了所有必需的字段和访问器方法。 Doctrine 支持继承,因此最终的数据库模式将完全相同,但您的 OO 模型将是正确的。

/** 
 * @MappedSuperclass 
 * @InheritanceType("SINGLE_TABLE")
 * @DiscriminatorColumn(type = "string", name = "discriminator")
 * @DiscriminatorMap({ "answer" = "Answer", "comment" = "Comment" })
 */
abstract class AbstractContent {
    /** @Column(type = "integer") @Id @GeneratedValue("AUTO") */
    protected $id;

    /** @Column(type="text") */
    protected $content;

    /** @Column(type = "datetime", name = "created_at") */
    protected $createdAt;

    public function __construct() {
        $this->createdAt = new \DateTime();
    }
}

/** @Entity */
class Answer extends AbstractContent { }

/** @Entity */
class Comment extends AbstractContent { }

/**
 * @OneToMany(targetEntity="Cms\Entity\Answer", mappedBy="parent")
 */
private $answers;

/**
 * @OneToMany(targetEntity="Cms\Entity\Comment", mappedBy="parent")
 */
private $comments;

您可以在 Doctrine 的文档页面上阅读有关继承的更多信息:继承映射 http://www.doctrine-project.org/docs/orm/2.0/en/reference/inheritance-mapping.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学说 ORM 条件关联 的相关文章

  • 原则 2 缓存:我可以将缓存与 Repository::find*() 一起使用吗?

    我是缓存新手 从文档中 我可以在查询中使用缓存 但是像这样的方法呢 em gt find Application Models project 1 如果你寻找一种自动性 我认为遮阳篷不是 他们不是这样的东西 我自己也在寻找这样的东西 您可以
  • 用教义 2 DBAL 连接子查询

    我正在重构 Zend 框架2应用程序使用学说 2 5 DBAL 而不是 Zend DB ZF1 我有以下 Zend Db 查询 subSelect db gt select gt from user survey status entrie
  • 表单未将帖子值绑定到实体

    我有一个学说实体 一个表单和 2 个字段集 当我用值填充实体时 值会按预期合并到表单中 当我尝试从表单数据创建实体时 它保持为空 我一定是忘记了什么 但就是找不到它 我还有其他几种没有字段集的表单 它们按预期工作 有任何想法吗 下面发布了我
  • 为关联数组选择哪种映射类型?学说ODM

    我有一个关于 顺便说一句 真的很棒 Doctrine ODM 的简单问题 假设您有一个类似以下的文档 Document class Test Id public id WHICHTYPE public field array 现在我想存储一
  • 如何将 Doctrine Entity Manager 注入 Symfony 4 服务

    我有一个控制器 use Doctrine ORM EntityManagerInterface class ExampleController public function someFunction ExampleService inje
  • Doctrine 模型的默认排序属性

    我想知道是否有办法声明我的学说模型的默认顺序 e g 我有一个work模型并且它有photos 当我加载作品时 与其关联的所有照片都会加载到 work gt photos 当我显示它们时 它们是按 ID 排序的 在另一个字段上声明默认顺序或
  • Symfony2 和 Doctrine,OneToOne 关系中的 Column 不能为 null

    这是一个实体 编辑 完整文件内容 Eve MoonBundle Entity MoonMaterial php namespace Eve MoonBundle Entity use Doctrine ORM Mapping as ORM
  • Doctrine 在 Active Record 之上添加了什么 - CodeIgniter?

    我真的很喜欢 CodeIgniter Active Record 它非常好地允许我进行所有需要的数据库查询 但我也一直在阅读有关 ORM 的内容 例如 Doctrine 当我阅读 Doctrine 的文档时 它的使用似乎不像 Active
  • 在 Symfony 2 和耦合中集成捆绑包(相关 Dotrine 2 实体)

    据我了解 捆绑是分离功能 假设我有一个UserBundle ABlogBundle 然后我的BlogBundle Post将有一个author引用的字段UserBundle User 这不是违背了 Bundle 的目的吗 我无法交换另一个U
  • 如何使用 symfony 对管理面板中自己的列进行排序?

    M schema yml News columns title type string 50 category id type integer 4 relations Category local category id foreign c
  • 获取实体内的entityManager

    我想使用类似的东西 em this gt getEntityManager 在实体内部 我明白我应该将其作为一项服务但出于某些测试目的 我想从实体访问它 有可能实现吗 我尝试过 em this gt getEntityManager pro
  • 我是否需要破解 ZendFramework1.10.8/Doctrine1.2.2 才能生成模型?

    我已经开始阅读 zend 框架 它与 Doctrine 一起使用 并实现了一个小项目来掌握理解 我已经到了需要生成模型的地步 就像拥有一个生成脚本一样 如 Doctrine 1 2 中建议的那样 2 pdf 手册 经过几次不成功的尝试 例如
  • @MappedSuperclass 和 @OneToMany

    我需要关联 OneToMany从乡村到超一流Place MappedSuperclass 它可以是双向的 我需要类似的东西 OneToAny MappedSuperclass public class Place private Strin
  • Doctrine ORM 的表命名约定

    使用 Doctrine ORM 时是否有命名表的约定 我喜欢用复数来命名表格 但如果有约定 我想遵守它 因此 表 users 将与使用 fk 作为单数 user id 的表相关 是否有最佳实践 使用单数或复数表名称 如果是后者 这如何应用于
  • Symfony2 - Doctrine - 更新后没有更改集

    因此 当实体的某个值发生更改时 我会发送电子邮件 我只想在更新后发送电子邮件 以防更新因任何原因失败 所以在更新前我可以这样做 public function preUpdate LifecycleEventArgs args if arg
  • 如何将表中不存在但原始SQL中存在的实体字段设置为别名?

    假设我们有一个这样的查询 SELECT CUSTOM EXPRESSION as virtualfield FROM users 用户的实体本身具有 虚拟字段 但映射注释没有 因为表没有该字段 假设它作为原始 SQL 执行 我们如何使用上面
  • 在 Symfony3 中覆盖 Doctrine2 类型

    我想用Carbon http carbon nesbot com docs 我的 Symfony 3 2 应用程序中的对象而不是 SPL DateTime 对象 我发现了一组 DoctrineExtension 类here https gi
  • 如何开始在具有 zf-apigility-doctrine 的 Apigility 应用程序中使用 Doctrine 2?

    我想整合学说2 http www doctrine project org to an 敏捷性 https apigility org driven Zend 框架 2 http framework zend com 应用 所以我安装了zf
  • 学说迁移后备

    我们正在使用原则迁移 当迁移包含多个操作并且其中一个操作失败时 通常会出现问题 例如 如果迁移添加了 5 个外键 其中第 5 个失败 而字段长度不同 则修复字段错误并重新生成迁移不会not修复整个问题 而现在出现一个与 4 个密钥已存在有关
  • 在链配置的命名空间中找不到类“App\Entity\Users”

    我想使用 Symfony 4 添加身份验证系统 我正在使用 Mssql 数据库 该数据库已创建并填充 这不是第一次 我正在使用它 但这是我第一次遇到问题 我从数据库导入了所有实体 尤其是Users Entity 我也配置了LoginForm

随机推荐

  • 如何使用 Ninject 注入一些通用的 asp.net http 处理程序?

    我是 Ninject 的新手 我不知道如何注入我的通用 http 处理程序 我有一个 MVC3 项目 我将我的服务注入到控制器中 没有任何问题 这是我在 Ninject App start 类中用于注册服务的内容 private stati
  • 以编程邮件合并方式将数据注入到现有的 Excel 电子表格中?

    我想自动将数据输入到 Excel 电子表格中 用户数据将存在于网站上 当用户请求时 需要将该数据注入到 Excel 电子表格中 复杂之处在于 Excel 电子表格的格式在不同用户之间可能存在很大差异 它将由用户定义 我一直认为这是一个模板问
  • 如何让 IDropTarget 与 Delphi 中的 Drop Handler 配合使用?

    我已将文件扩展名与我的 Delphi 2009 程序相关联 我一直在使用命令行调用方法将文件名传递给我的 Delphi 程序 以便可以打开它 但是 我发现当选择多个文件并一次单击所有文件时 它会在程序的单独实例中打开每个文件 我问过这个 h
  • SqlServer 2005:没有共享记录的死锁问题

    我遇到两个不访问任何公共记录的事务的死锁问题 也没有锁升级 所以我无法解释为什么可能出现僵局 当两个这样的事务同时执行时就会发生死锁 begin transaction update A set value value where id 1
  • 将 JSON 对象和对象列表传递给 ASP.Net 控制器 [重复]

    这个问题在这里已经有答案了 我需要以下方面的帮助 我有这两个模型以及我将在下面使用它们的方法 public class RoleModel public string Name get set public string Descripti
  • 如何在 Java 中同步或锁定变量?

    让我使用这个小而简单的示例 class Sample private String msg null public void newmsg String x msg x public String getmsg String temp ms
  • 网站托管在 IIS 中时无法打开数据库

    当我从 Visual Studio 运行我的网站时 一切正常 现在我正在尝试继续并开始测试多租户部分 因此我必须将我的网站移至 IIS 由于某种原因我无法访问数据库 当我打开需要数据库访问的页面时出现的错误是 无法打开登录请求的数据库 GW
  • 文本列不能存储超过 8000 个字符

    我对此进行了研究 发现textSQL Server 中的列可以存储超过 8000 个字符 但是当我在文本列中运行以下插入时 它只插入 8000 个字符 UPDATE a SET File b Header CHAR 13 CHAR 10 d
  • 将 Leaflet 地图设置为高度:容器的 100%

    请问我们如何将地图 div 设置为其容器的 height 100 我已经在引导模板内容部分中尝试过此操作 但我得到的只是 0px 的高度 甚至 Google Dev 工具也将 map 高度显示为 0px body padding 0 mar
  • 居中 DatePicker 控件

    我正在使用 wpf 工具包中的 datepicker 控件 我需要将日期选择器控件中的内容居中对齐 我怎样才能实现这个目标 尝试VerticalContentAlignment 居中 它不起作用
  • 为什么 jsp:include 参数不可见

    我有完全相同的基本问题关于访问 jsp param 值 https stackoverflow com questions 3698068 jsp include with parameters usage simple question正
  • 获取表中列中的行

    我想从我的表中得到一个特殊的结果 并且我想知道这是可能的 我有一个像这样的表 idA idB val 按此值 idA idB val 1 5 50 1 6 0 1 7 NULL 2 5 100 2 6 12 2 7 0 我想通过这样的格式从
  • 为什么 spring 不使用我的 Converter

    我的 applicationContext xml 中有这个
  • 无法删除错误 CRUD API(NodeJS、MongoDB、Express)

    我在尝试从我正在处理的 API 项目中创建的 mongo 数据库中删除字段时遇到错误 我对 RESTful API 以及 MongoDB 和 Express 都还很陌生 我按照 YouTube 上的教程进行操作 该教程解释了制作这样一个 A
  • OpenCV CLAHE 中的剪辑限制究竟意味着什么?

    我读过很多文章说clip limit是CDF斜率的极限 但是在OpenCV中 该参数可以设置为0 999 我不知道这个参数的最大值 PDF的总和不等于1吗 斜率怎么会大于1呢 剪辑限制的另一种说法是 这是对每个灰度级计数的限制 因此例如 如
  • 如何以编程方式添加导航控制器?

    在我的应用程序中 有一个要求 我的笔尖有 6 个按钮 当我按下任何按钮时 新的笔尖将根据按下的按钮加载到窗口中 问题是加载新笔尖后如果我想返回到以前的笔尖 具有所有按钮 如何添加导航控制器 我现在正在做的是在按下按钮时加载新笔尖 objNe
  • Google Maps API:反向地理编码和地址打印

    我创建了一张包含许多不同位置的地图 每个位置都有一种标记和标题 描述 我想做的是从 lat lng 中提取相对地址 我发现这个功能 https developers google com maps documentation geocodi
  • 自定义订单详细信息页面上的 Woocommerce 自定义字段

    查看文档 似乎没有明确的方法在客户的订单详细信息页面上显示自定义字段 我可以毫无问题地将自定义字段显示在管理订单详细信息或客户的电子邮件上 我可以看到可以完成的唯一方法是复制主题文件夹中的 woocommerce order order d
  • 如何使用 Geckodriver 保留 Firefox 配置文件的缓存?

    我需要用 Selenium 保留我的缓存Geckodriver 我有一个 Firefox 配置文件 我在启动时加载它Geckodriver ProfilesIni profilesIni new ProfilesIni FirefoxPro
  • 学说 ORM 条件关联

    我正在建立一个问答网站 我的问题 答案和评论都在同一个网站上posts桌子 但他们的postType是不同的 我可以通过该协会获得问题的答案和答案的评论 OneToMany targetEntity Cms Entity Post mapp