簡體   English   中英

映射問題學說與Symfony

[英]Mapping issue Doctrine & Symfony

我有3個實體,其中的映射引起了一些問題。

我面臨的兩個問題是:

  1. 當我使用主義命令行架構更新時,它將刪除item_type_field表中的“ item_type”列。 看起來教義的是在YML文件中沒有看到此列。

  2. 在Symfony應用程序中,TypeField和FieldType之間的映射不起作用。 當我轉儲字段的FieldType時,它將返回null。

我想念什么嗎?

實體和映射:

class ItemType
{
    protected $id;  
    protected $title;
    protected $description;
    protected $fields;


    public function __construct(){  
         $this->fields = new ArrayCollection();
    }


    public function getId()
    {
        return $this->id;
    }

    public function setTitle($title)
    {
        $this->title = $title;

        return $this;
    }

    public function getTitle()
    {
        return $this->title;
    }

    public function setDescription($description)
    {
        $this->description = $description;

        return $this;
    }

    public function getDescription()
    {
        return $this->description;
    }   

    public function addField(\Aveqcms\CoreBundle\Entity\TypeField $field)
    {
        $field->setItemType($this);
        $this->fields[] = $field;

        return $this;
    }

    public function removeField(\Aveqcms\CoreBundle\Entity\TypeField $field)
    {
        $this->fields->removeElement($field);
    }

    public function getFields()
    {
        return $this->fields;
    }
}


class TypeField
{

    private $id;  
    private $item_type;
    private $field_type;


    public function getId()
    {
        return $this->id;
    }

    public function setItemType($itemType)
    {
        $this->item_type = $itemType;
        return $this;
    }

    public function getItemType()
    {
        return $this->item_type;
    }

    public function setFieldType($fieldType)
    {
        $this->field_type = $fieldType;

        return $this;
    }

    public function getFieldType()
    {
        return $this->field_type;
    }
}


class FieldType
{

    private $id;
    private $title; 
    private $fields;

    public function __construct()
    {
        $this->fields = new ArrayCollection();
    }   

    public function getId()
    {
        return $this->id;
    }

    public function setTitle($title)
    {
        $this->title = $title;
        return $this;
    }


    public function getTitle()
    {
        return $this->title;
    }
}

映射文件:

Acme\CoreBundle\Entity\ItemType:
    type: entity
    table: item_type
    id:
        id:
            type: integer
            generator: { strategy: AUTO }
    fields:
        title:
            type: string
            length: 255
        description:
            type: string
            length: 255  
    oneToMany:
        fields:
            targetEntity: TypeField
            mappedBy: item_type
            cascade: [persist]   

Acme\CoreBundle\Entity\TypeField:
    type: entity
    table: item_type_field
    id:
        id:
            type: integer
            generator: { strategy: AUTO }  
    manyToOne:
        field_type:
            targetEntity: FieldType
            inversedBy: fields
            joinColumn:
                name: field_type
                referencedColumnName: id        
    manyToOne:
        item_type:
            targetEntity: ItemType
            inversedBy: fields
            joinColumn:
                name: item_type
                referencedColumnName: id

Acme\CoreBundle\Entity\FieldType:
    type: entity
    table: field_type
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    fields:
        title:
            type: text
    oneToMany:
        fields:
            targetEntity: TypeField
            mappedBy: field_type

在TypeField中,多次重復了manyToOne。 第二個優先於第一個,這就是為什么學說沒有看到它。

Acme\CoreBundle\Entity\TypeField:
type: entity
table: item_type_field
id:
    id:
        type: integer
        generator: { strategy: AUTO }  
manyToOne:
    field_type:
        targetEntity: FieldType
        inversedBy: fields
        joinColumn:
            name: field_type
            referencedColumnName: id        
#manyToOne: *** Get rid of this ***
    item_type:
        targetEntity: ItemType
        inversedBy: fields
        joinColumn:
            name: item_type
            referencedColumnName: id

這可能會或可能不會解決您的所有問題。 它當然不能解決您非常令人困惑的命名約定的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM