0
votes

When running:

php app/console doctrine:schema:validate

I receive the error:

[Mapping] FAIL - The entity-class 'Path\ToBundle\Entity\Variant' mapping is invalid: * The referenced column name 'localsku' has to be a primary key column on the target entity class 'Path\ToBundle\Entity\Inventory'.

The killer here is that 'localsku' is indeed a primary key. Am I missing something major here? Thanks in advance for any assistance, and I apologize if I've missed some key piece of information.

Variant Entity is defined as:

Path\ToBundle\Entity\Variant:
  type: entity
  table: variant
  uniqueConstraints:
    sku:
      columns:
        - sku
  id:
    variantId:
      type: integer
      nullable: false
      unsigned: false
      comment: ''
      id: true
      column: variant_id
      generator:
        strategy: IDENTITY
  fields:
    name:
      type: string
      nullable: false
      length: 255
      fixed: false
      comment: ''
    sku:
      type: string
      nullable: false
      length: 255
      fixed: false
      comment: ''
  oneToOne:
    inventory:
      targetEntity: Inventory
      cascade: {  }
      mappedBy: null
      inversedBy: variant
      joinColumns:
        sku:
          referencedColumnName: localsku
      orphanRemoval: false
  lifecycleCallbacks: {  }

Inventory Entity is defined as:

Path\ToBundle\Entity\Inventory:
  type: entity
  table: Inventory
  id:
    localsku:
      type: string
      nullable: false
      length: 255
      fixed: false
      comment: ''
      id: true
      column: LocalSKU
      generator:
        strategy: IDENTITY
  fields:
    itemname:
      type: string
      nullable: true
      length: 255
      fixed: false
      comment: ''
      column: ItemName
    qoh:
      type: integer
      nullable: true
      unsigned: false
      comment: ''
      column: QOH
    location:
      type: string
      nullable: true
      length: 250
      fixed: false
      comment: ''
      column: Location
    barcode:
      type: string
      nullable: true
      length: 25
      fixed: true
      comment: ''
      column: Barcode
  oneToOne:
    variant:
      targetEntity: Variant
      cascade: {  }
      mappedBy: inventory
      inversedBy: null
      joinColumns:
        localsku:
          referencedColumnName: sku
      orphanRemoval: false
  lifecycleCallbacks: {  }

Variant Entity reference to Inventory:

    /**
 * Inventory
 *
 * @var \Path\ToBundle\Entity\Inventory
 *
 * @ORM\OneToOne(targetEntity="Path\ToBundle\Entity\Inventory", inversedBy="variant")
 * @ORM\JoinColumn(name="sku", referencedColumnName="localsku")
 */
protected $inventory;

Inventory Entity reference to Variant:

    /**
 * Variant
 *
 * @var \Path\ToBundle\Entity\Variant
 *
 * @ORM\OneToOne(targetEntity="Path\ToBundle\Entity\Variant", inversedBy="inventory")
 * @ORM\JoinColumn(name="localsku", referencedColumnName="sku")
 */
protected $variant;
1

1 Answers

0
votes

Your association mapping is wrong.

It should be something like that, assuming Variant table have a "sku" field.

Variant Entity :

/**
 * Inventory
 *
 * @var \Path\ToBundle\Entity\Inventory
 *
 * @ORM\OneToOne(targetEntity="Path\ToBundle\Entity\Inventory", inversedBy="variant")
 * @ORM\JoinColumn(name="sku", referencedColumnName="localsku")
 */
protected $inventory;

Inventory Entity :

/**
 * Variant
 *
 * @var \Path\ToBundle\Entity\Variant
 *
 * @ORM\OneToOne(targetEntity="Path\ToBundle\Entity\Variant", mappedBy="inventory")
 */
protected $variant;

http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html#one-to-one-bidirectional

P.S : I'm curious. You are using both yml configuration and annotation for the same entities ? I'm not sure that doctrine is able to merge them, does it works ?