【问题标题】:Doctrine 2 join table bug?Doctrine 2 连接表错误?
【发布时间】:2011-03-21 03:27:01
【问题描述】:

我有两个实体,$staff 和 $pub,还有一个连接表 $staffPub。我可以保存和使用 $staff 和 $pub,当我手动填充 $staffPub 数据库表时,这些关系都有效。问题是,如果我尝试保持 $staffPub 关系,我会收到以下通知并且该行未提交:

通知:未定义索引:..../Doctrine/ORM/Persisters/BasicEntityPersister.php 中的 rmcode 在第 491

通知:未定义索引:..../Doctrine/ORM/Persisters/BasicEntityPersister.php 中的 pubofficeid 在第 491 行 42

在我添加 @JoinColumn 注释之前,$staffPub 实体没有问题地持续存在。

class StaffPub {
/**
 * @ManyToOne (targetEntity="Hs_Profile_Publication", inversedBy="staffPubRelation", cascade={"persist"})
 * @JoinColumn(name="rmcode", referencedColumnName="rmcode")
 */
private $publication;

/**
 * @ManyToOne (targetEntity="Hs_Profile_Staff", inversedBy="staffPubRelation", cascade={"persist"})
 * @JoinColumn(name="pubofficeid", referencedColumnName="pubofficeid")
 */
public $staff;

.... etc ...

Staff 和 Pub 都有 id 'id'。当我将上面的 referencedColumnName 设置为“id”时,它不会抛出通知。所以,问题是,如何分别在 Staff 和 Pub 中将 'pubofficeid' 和 'rmcode' 定义为 id?如果我只是添加@Id,我会在尝试持久化对象时收到以下错误:

SQLSTATE[HY093]: 参数号无效:绑定变量的数量与标记的数量不匹配

在 Doctrine/DBAL/Statement.php 第 131 行中抛出。

所以归结为以下问题:如何持久化具有多个@Id 的对象?

【问题讨论】:

    标签: php mysql doctrine-orm


    【解决方案1】:

    StaffPub 的 ID 是什么?你确定这不是 OneToOne 吗? inversedBy 的命名暗示了这一点。

    【讨论】:

    • /** * @Id * @Column (type="integer", length=11, name="id") * @GeneratedValue */ protected $id = null;
    • 以上是 StaffPub 的 id - 对格式感到抱歉。一个工作人员可以有许多出版物,一个出版物可以有许多工作人员(作者)。为什么 inversedBy 的命名暗示了 oneToOne 关系?
    猜你喜欢
    • 2011-05-25
    • 2011-06-22
    • 2015-02-21
    • 1970-01-01
    • 2012-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多