In TypeField you have manyToOne repeated twice. The second one overrides the first one whcih is why doctrine is not seeing it.
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
This may or may not fix all your issues. And it certainly does not address the issue of your very confusing naming conventions.