php - ManyToOne 作为 Doctrine 上的 ID (symfony2)

标签 php symfony doctrine-orm doctrine

我正在使用 Symfony2 LTS 开发一个项目,需要为 Doctrine 创建实体。在我的数据库模型中,我有一个 OneToMany 关系,它是 PK 的一部分。

Parent
+-------+--------------+-----+----------------+
| Field |     Type     | Key |     Extra      |
+-------+--------------+-----+----------------+
| id    | int(11)      | PRI | auto_increment |
| name  | varchar(255) |     |                |
+-------+--------------+-----+----------------+

MyChild
+--------------+---------+-----+----------------+
|    Field     |  Type   | Key |     Extra      |
+--------------+---------+-----+----------------+
| id           | int(11) | PRI | auto_increment |
| foreignId    | int(11) | PRI |                |
| other_fields | text    |     |                |
+--------------+---------+-----+----------------+

当我创建一个仅 ID 为 @ORM\Id 的 PHP 实体类时,没有问题,但是当我尝试添加 ManyToOne 作为 Id 时,出现错误

[Doctrine\ORM\Mapping\MappingException]                                                 
  Single id is not allowed on composite primary key in entity MyBundle\Entity\MyChild

Php 类如下所示:

class MyChild
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var MyParent
 *
 * @ORM\Id
 * @ORM\ManyToOne(targetEntity="MyParent", inversedBy="childs")
 * @ORM\JoinColumn(name="foreignId", referencedColumnName="id")
 */
private $parent;

最佳答案

您应该从 $parent 中删除 @ORM\Id 并为 $id 和 $parent 创建一个 UniqueConstraint。

/**
 * @ORM\Table(uniqueConstraints={
 *   @ORM\UniqueConstraint(
 *     columns={"id", "foreignId"}
 *   )
 * })))
 */
class MyChild
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var MyParent
 *
 * @ORM\ManyToOne(targetEntity="MyParent", inversedBy="childs")
 * @ORM\JoinColumn(name="foreignId", referencedColumnName="id")
 */
private $parent;

关于php - ManyToOne 作为 Doctrine 上的 ID (symfony2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35294922/

相关文章:

php - 我应该在获取后手动关闭数据库连接和语句的游标吗?

php - 从 mysql DB 检索数据不起作用/PHP

php - 在 C 中使用 pthread 调用 php 函数

php - Magento:在外部页面上加载评论表单

postgresql - Symfony/学说 : Invalid byte sequence

php - 使用 symfony 3 注入(inject)服务中的 Doctrine dbal

mysql - Symfony FOSRestController

php - 数据库行更新失败,PHP 没有任何错误

unit-testing - catch block 中的 PHPUnit 测试代码

php - 我可以在 Sonata Admin Controller 中使用 prePersist/preUpdate 来持久化多个对象吗?