我希望您能为您提供帮助,因为我已经搜索了几天。
我有一个叫做“属性”的类。其中有一个parentId
,它引用了Attributes
的另一个条目。
我想用一些额外的字段将实体“属性”扩展为“产品”。除parentId
关系外,所有字段均得到扩展。
当我使用getter和setter将父项添加到Products
时,我得到一个错误:
`"Compile Error: Declaration of Products::setParent(?Attributes $parent): Products must be compatible with Attributes::setParent(?Attributes $parent)
: Attributes"`
我尝试了具有所有字段的独立实体Products
,但与Attributes
的关系导致数据库关系问题。它是Attributes
的扩展。
尝试了不同类型的吸气剂和吸气剂,并将其从父级扩展出去。
一直在网上寻找答案,但没有看到具有内部关系的继承。
属性类:
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。
答案 0 :(得分:2)
您的父母二传手似乎是这样的:
for (int i = 0; i < employees.length; i++) {
// your code
if (add != 1){
break;
}
add = s.nextInt()
}
您只需在产品类的setParent行的末尾用/** Product **/
public function setParent(?Attributes $parent): Products
{
$this->parent = $parent;
return $this;
}
/** Attribute **/
public function setParent(?Attributes $parent)
{
$this->parent = $parent;
return $this;
}
替换:Products
即可解决此问题。
但是您应该使用界面
: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;
}
}