You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Doctrine XML映射将外键设为主键?

问题:Doctrine XML映射实现派生身份(外键作为主键)

我在Doctrine官方文档中找到用Attributes实现将外键作为主键(派生身份)的方法,但想了解如何用XML实现相同效果。我尝试了两种配置方式:

第一种配置:

<id name="user_id" type="string" />
<one-to-one field="product" target-entity="App\Entity\User" orphan-removal="true">
    <cascade>
        <cascade-persist/>
        <cascade-remove/>
    </cascade>

    <join-column name="user_id" referenced-column-name="id" on-delete="CASCADE" />
</one-to-one>

报错:Property App\Entity\Address::$user_id does not exist

第二种配置:

<one-to-one field="product" target-entity="App\Entity\User" orphan-removal="true">
    <cascade>
        <cascade-persist/>
        <cascade-remove/>
    </cascade>
     <id name="user_id" type="string" />
    <join-column name="user_id" referenced-column-name="id" on-delete="CASCADE" />
</one-to-one>

报错:No identifier/primary key specified for Entity "App\Entity\Address". Every Entity must have an identifier/primary key.

希望得到正确的XML映射配置方法。


正确的XML映射配置

要实现派生身份(将一对一关联的外键作为实体主键),需将<id>标签嵌套在<one-to-one>内部,通过关联字段派生主键,无需单独定义实体级主键字段。正确配置如下:

<entity name="App\Entity\Address" table="address">
    <one-to-one field="user" target-entity="App\Entity\User" orphan-removal="true">
        <cascade>
            <cascade-persist/>
            <cascade-remove/>
        </cascade>
        <id name="user_id">
            <join-column name="user_id" referenced-column-name="id" on-delete="CASCADE"/>
        </id>
    </one-to-one>

    <!-- 可添加其他非主键字段配置 -->
</entity>

关键说明:

  • 实体级别无需单独定义<id>,<id>嵌套在<one-to-one>内表示主键由关联实体派生
  • 实体类中只需定义一对一关联属性(如$user),不需要单独的$user_id属性
  • <join-column>必须嵌套在<id>内部,明确数据库列的映射关系

对应实体类代码示例:

namespace App\Entity;

class Address
{
    private $user;

    // Getter & Setter
    public function getUser(): ?User
    {
        return $this->user;
    }

    public function setUser(User $user): self
    {
        $this->user = $user;
        return $this;
    }

    // 其他字段的Getter/Setter
}

内容的提问来源于stack exchange,提问作者Bogdan Dubyk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:48:24