Skip to content

Commit

Permalink
Merge branch 'DDC-1649' into 2.2
Browse files Browse the repository at this point in the history
  • Loading branch information
beberlei committed Feb 20, 2012
2 parents bd37b83 + af6de10 commit 31709b4
Show file tree
Hide file tree
Showing 2 changed files with 116 additions and 0 deletions.
5 changes: 5 additions & 0 deletions lib/Doctrine/ORM/Tools/SchemaValidator.php
Original file line number Diff line number Diff line change
Expand Up @@ -106,6 +106,11 @@ public function validateClass(ClassMetadataInfo $class)

$targetMetadata = $cmf->getMetadataFor($assoc['targetEntity']);

if (isset($assoc['id']) && $targetMetadata->containsForeignIdentifier) {
$ce[] = "Cannot map association '" . $class->name. "#". $fieldName ." as identifier, because " .
"the target entity '". $targetMetadata->name . "' also maps an association as identifier.";
}

/* @var $assoc AssociationMapping */
if ($assoc['mappedBy']) {
if ($targetMetadata->hasField($assoc['mappedBy'])) {
Expand Down
111 changes: 111 additions & 0 deletions tests/Doctrine/Tests/ORM/Tools/SchemaValidatorTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,33 @@ public function testInvalidToOneJoinColumnSchema()
$ce
);
}

/**
* @group DDC-1587
*/
public function testValidOneToOneAsIdentifierSchema()
{
$class1 = $this->em->getClassMetadata(__NAMESPACE__ . '\DDC1587ValidEntity2');
$class2 = $this->em->getClassMetadata(__NAMESPACE__ . '\DDC1587ValidEntity1');

$ce = $this->validator->validateClass($class1);

$this->assertEquals(array(), $ce);
}

/**
* @group DDC-1649
*/
public function testInvalidTripleAssociationAsKeyMapping()
{
$classThree = $this->em->getClassMetadata(__NAMESPACE__ . '\DDC1649Three');
$ce = $this->validator->validateClass($classThree);

$this->assertEquals(Array(
"Cannot map association 'Doctrine\Tests\ORM\Tools\DDC1649Three#two as identifier, because the target entity 'Doctrine\Tests\ORM\Tools\DDC1649Two' also maps an association as identifier.",
"The referenced column name 'id' has to be a primary key column on the target entity class 'Doctrine\Tests\ORM\Tools\DDC1649Two'."
), $ce);
}
}

/**
Expand Down Expand Up @@ -154,3 +181,87 @@ class InvalidEntity2
*/
protected $assoc;
}

/**
* @Entity(repositoryClass="Entity\Repository\Agent")
* @Table(name="agent")
*/
class DDC1587ValidEntity1
{
/**
* @var int
*
* @Id @GeneratedValue
* @Column(name="pk", type="integer")
*/
private $pk;

/**
* @var string
*
* @Column(name="name", type="string", length=32)
*/
private $name;

/**
* @var Identifier
*
* @OneToOne(targetEntity="DDC1587ValidEntity2", cascade={"all"}, mappedBy="agent")
* @JoinColumn(name="pk", referencedColumnName="pk_agent")
*/
private $identifier;
}

/**
* @Entity
* @Table
*/
class DDC1587ValidEntity2
{
/**
* @var DDC1587ValidEntity1
*
* @Id
* @OneToOne(targetEntity="DDC1587ValidEntity1", inversedBy="identifier")
* @JoinColumn(name="pk_agent", referencedColumnName="pk", nullable=false)
*/
private $agent;

/**
* @var string
*
* @Column(name="num", type="string", length=16, nullable=true)
*/
private $num;
}

/**
* @Entity
*/
class DDC1649One
{
/**
* @Id @Column @GeneratedValue
*/
public $id;
}

/**
* @Entity
*/
class DDC1649Two
{
/** @Id @ManyToOne(targetEntity="DDC1649One")@JoinColumn(name="id", referencedColumnName="id") */
public $one;
}

/**
* @Entity
*/
class DDC1649Three
{
/** @Id @ManyToOne(targetEntity="DDC1649Two") @JoinColumn(name="id",
* referencedColumnName="id") */
private $two;
}

0 comments on commit 31709b4

Please sign in to comment.