php - 如何扩展具有内部关系的实体?
问题描述
我希望你能提供帮助,因为我已经找了几天了。我有一个名为“属性”的类。在其中,有一个parentId
which 引用了 的另一个条目Attributes
。
我想用一些额外的字段将实体“属性”扩展为“产品”。除关系外,所有字段都在扩展parentId
。
Products
当我使用 getter 和 setter添加父级时,出现错误:
`"Compile Error: Declaration of Products::setParent(?Attributes $parent): Products must be compatible with Attributes::setParent(?Attributes $parent)
: Attributes"`
我已经尝试了一个Products
包含所有字段的独立实体,但与Attributes
导致数据库关系问题的关系。它是Attributes
.
尝试了不同类型的 getter 和 setter,并将其从父级扩展。
一直在网上搜索答案,但没有看到具有内部关系的继承。
属性类:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
*/
class Attributes
{
/**
* @ORM\Id()
* @ORM\Column(type="string", length=255)
*/
private $id;
/**
* @ORM\Column(type="string", length=255)
*/
private $val;
/**
* @ORM\Column(type="string", length=255)
*/
private $category;
/**
* @ORM\ManyToOne(targetEntity="App\Entity\Attributes")
* @ORM\JoinColumn(name="parent_id", referencedColumnName="id")
*/
private $parent;
}
产品类别:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
*/
class Products extends Attributes
{
/**
* @ORM\Column(type="string", length=255)
*/
private $newField1;
/**
* @ORM\Column(type="string", length=255)
*/
private $newField2;
}
我想知道为什么内部关系“父母”没有被扩展,我很想知道如何在扩展类中获取 parentId。
解决方案
你的父母二传手似乎是这样的:
/** Product **/
public function setParent(?Attributes $parent): Products
{
$this->parent = $parent;
return $this;
}
/** Attribute **/
public function setParent(?Attributes $parent)
{
$this->parent = $parent;
return $this;
}
您可以简单地通过在产品类中的 setParent 行末尾替换:Products
by来修复它。:Attributes
但是你应该使用一个接口
interface AttributeInterface
{
public function setParent(?AttributeInterface $parent): AttributeInterface
}
并且您的每个实体都应该实施它:
属性:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
*/
class Attributes implements AttributesInterface
{
/*****/
public function setParent(?AttributeInterface $parent): AttributeInterface
{
$this->parent = $parent;
return $this;
}
}
产品:
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity()
*/
class Products extends Attributes implements AttributesInterface
{
/*****/
}
推荐阅读
- haskell - 如何为具有两个参数的类型实例化 `Functor`?
- sql - 带有随机数的 SQL 选择语句
- sqlite - 在我的 Ubuntu(Ubuntu 18.04.3 LTS/bionic)上设置 Yocto,出现错误“ImportError: No module named '_sqlite3'”
- express - 如何在 Express 中保存持久数据?
- webpack - 将声明标记为无副作用的摇树
- r - 在 dplyr 中混淆 mutate_all 的 .funs 参数
- acumatica - 网格底部的 PagerSetting 显示不正确
- mysql - 重新格式化输入 DATE 数据
- highcharts - 带有分组系列工具提示的 Highcharts 折线图
- css - 如何使第 n 个孩子包含一个范围(例如 0-19)