@ORM\Column(name="xyz") not working


(Benjamin Klix) #1

I have a plugin that devides some tags into groups, so each group can contain multiple tags but each tag only has one group. In the Tag-Class i defined the group like with a custom name (@ORM\Column(name="groupname")) but the custom name is being ignored.

Tagname and group are part of @Flow\Identity. Here is part of the model:

class Tag
{

    /**
     * @var string
     * @Flow\Validate(type="NotEmpty")
     * @Flow\Validate(type="StringLength", options={ "maximum"=255 })
     * @Flow\Identity
     */
    protected $name;

    /**
     * @var Group
     * @ORM\Column(name="groupname", nullable=false)
     * @ORM\ManyToOne(targetEntity="\Vendor\TagManager\Domain\Model\Group")
     * @Flow\Validate(type="NotEmpty")
     * @Flow\Identity
     */
    protected $group;

    ...
}

However, the problem is, that the custom column name still is group and therefor leads to some problems in the mysql-queries as GROUP has reserved meanings. Is there still something missing? Or is there a bug in Neos/Doctrine?


Quoting Strategy for MySQL reserved keywords column names
(Christian Müller) #2

Did you create a migration with the annotation in place?


(Benjamin Klix) #3

I tryed to create a migration but it didn’t create one as it didn’t notice the change.


(Soren Malling) #4

The class schema cache can sometime cause issues, so make sure that you empty all cache ./flow neos.flow:cache:flush --force and then create the migration again :slight_smile:


(Benjamin Klix) #5

It still says

No changes detected in your mapping information.

when i run flow doctrine:migrationgenerate.


(Benjamin Klix) #6

I now renamed the property group to taggroup and updated all relevant parts of the code including templates, getter and setter and controller.


(Christian Müller) #7

Very strange. Might need some digging to understand what’s going on.


(Peter Gisler) #8

I can confirm this behaviour!

Since the @ORM\Column(name=“xyz”) annotation seems to be ignored when calculating differences between domain model and database table, a possible workaround is:

  1. Delete the property in the domain model
  2. Generate a new migration
  3. Add the property (with the new name) to the domain model
  4. Again, generate a new migration

(Peter Gisler) #9

May be this belongs to this topic as well:

The addition of backticks to the @ORM\Column(name="myName") (imagine arround myName - they’re not displayed properly due to the “rich text formatting”) annotation does not automatically add backticks to the corresponding, generated SQL statements (as described here: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/basic-mapping.html#quoting-reserved-words).