gpt4 book ai didi

php - 学说 2.2 ORM : find extended entity

转载 作者:行者123 更新时间:2023-12-05 05:27:02 24 4
gpt4 key购买 nike

我应该如何注释继承才能找到子类?我当前的注释:

<?php
// Product.php
namespace Entity;

/**
* @Entity @Table(name="products")
**/
class Product
{
/**
* @var int
* @Id @Column(type="integer") @GeneratedValue
*/
protected $id;
}


<?php
namespace Entity;
// Coffee.php
/**
* @Entity
*/
class Coffee extends Product
{
protected $taste;
}

当我持久化新实体时,它就像一个魅力,但无法通过 Id 获取现有实体

$entityManager->find('Entity\\Coffee', 1)

有错误:

Column not found: 1054 Unknown column 't0.id' in 'where clause'

我不能使用 MappedSuperclass用于产品。


更新:

Product::taste 不是数据库列。它是一个 POPO 字段。我必须将自己与 Doctrine ORM 继承混淆,它旨在扩展模型以保留扩展实体的额外数据。在我的例子中,子类没有额外的列,而是定义了基类的不同行为。此外,两者可以互换,所以我希望

$coffee = new Entity\Coffee();
$entityManager->persist($coffee);
$entityManager->flush();

/* @var Entity\Product $product */
$product = $entityManager->find('Entity\\Product', $coffee->getId());

/* @var Entity\Coffee $coffee */
$coffee = $entityManager->find('Entity\\Coffee', $product->getId());

看来我并不真的需要 ORM 继承,而只是将 products 表中的数据混合到基对象或子对象中。不确定是否可能。

最佳答案

您需要在父类(super class)上提供 InheritanceType、DiscriminatorMap 和 DiscriminatorColumn 才能正确映射继承关系。它将恰好向表中添加一个额外的列(您在 DiscriminatorColumn 中指定的列)。

关于php - 学说 2.2 ORM : find extended entity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com