Skip to content

Loading…

DDC-1268: generate:entities creates bad method names with OneToMany #1879

Closed
doctrinebot opened this Issue · 7 comments

2 participants

@doctrinebot

Jira issue originally created by user alessandro1997:

Hi. I noticed a minor bug in the generate:entities* console task. I've got a *Region entity that had the following property:

/****
 * @ORM\OneToMany(targetEntity="District", mappedBy="region")
 */
private $districts;

public function **construct()
{
    $this->districts = new ArrayCollection();
}

When I ran the generate:entities task it created the following methods:

/****
 * Add districts
 *
 * @param Fenix\StudyBundle\Entity\District $districts
 */
public function addDistricts(\Fenix\StudyBundle\Entity\District $districts)
{
    $this->districts[] = $districts;
}

/****
 * Get districts
 *
 * @return Doctrine\Common\Collections\Collection 
 */
public function getDistricts()
{
    return $this->districts;
}

The second method's name is correct, but what about addDistricts*? Since it allows me to add a single *District entity it should be as follows:

/****
 * Add district
 *
 * @param Fenix\StudyBundle\Entity\District $district
 */
public function addDistrict(\Fenix\StudyBundle\Entity\District $district)
{
    $this->districts[] = $district;
}

In other words, the term after "add" (as well as the parameter's name) should be the entity's name, not the property's one.

@doctrinebot

Comment created by @beberlei:

The problem is that making singular out of a word is not an easy task and i will not try to make this work somehow. The Entity Generator result is a helper, not necessarily generating the final result of a class. This is one case where the Code Generation will not nmake you happy, so just change it.

@doctrinebot

Comment created by alessandro1997:

Couldn't you just use the target Entity's name (and not the property's one) in the "add" method?

@doctrinebot

Comment created by @beberlei:

The shortname you mean? Yeah that would be an option you are right, i reopen the ticket

@doctrinebot

Comment created by @beberlei:

Fixed.

This is sort of a BC break for 2.1, however since this is just a tool and generating code i think its acceptable

@doctrinebot

Issue was closed with resolution "Fixed"

@doctrinebot

Comment created by alessandro1997:

Thanks a lot :-)

@doctrinebot

Comment created by matthewmatician:

Another option for a semantic method name would be to use 'addTo' as the prefix, as in 'addToDistricts'.

The problem with using the target Entity's name (instead of the property's) is that sometimes you need to have multiple properties that map to the same target Entity.

@beberlei beberlei was assigned by doctrinebot
@doctrinebot doctrinebot added this to the 2.1.1 milestone
@doctrinebot doctrinebot closed this
@doctrinebot doctrinebot added the Bug label
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.