如何扩展具有内部关系的实体?

时间:2019-04-23 08:53:55

标签: php doctrine symfony4

我希望您能为您提供帮助,因为我已经搜索了几天。 我有一个叫做“属性”的类。其中有一个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。

1 个答案:

答案 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;
    }
}