[DDC-522][DDC-419][DDC-383] Fixed.
This commit is contained in:
parent
69e9fd3145
commit
3630e06b84
@ -74,9 +74,13 @@ abstract class AbstractEntityInheritancePersister extends BasicEntityPersister
|
||||
$class = $this->_declaringClassMap[$column];
|
||||
if ($class->name == $entityName || is_subclass_of($entityName, $class->name)) {
|
||||
$field = $class->fieldNames[$realColumnName];
|
||||
if (isset($data[$field])) {
|
||||
$data[$realColumnName] = $value;
|
||||
} else {
|
||||
$data[$field] = Type::getType($class->fieldMappings[$field]['type'])
|
||||
->convertToPHPValue($value, $this->_platform);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$data[$realColumnName] = $value;
|
||||
}
|
||||
|
@ -800,8 +800,12 @@ class BasicEntityPersister
|
||||
$column = $this->_resultColumnNames[$column];
|
||||
if (isset($this->_class->fieldNames[$column])) {
|
||||
$field = $this->_class->fieldNames[$column];
|
||||
if (isset($data[$field])) {
|
||||
$data[$column] = $value;
|
||||
} else {
|
||||
$data[$field] = Type::getType($this->_class->fieldMappings[$field]['type'])
|
||||
->convertToPHPValue($value, $this->_platform);
|
||||
}
|
||||
} else {
|
||||
$data[$column] = $value;
|
||||
}
|
||||
|
@ -1870,7 +1870,7 @@ class UnitOfWork implements PropertyChangedListener
|
||||
doctrine_populate_data($entity, $data);
|
||||
} else {
|
||||
foreach ($data as $field => $value) {
|
||||
if (isset($class->reflFields[$field])) {
|
||||
if (isset($class->fieldMappings[$field])) {
|
||||
$class->reflFields[$field]->setValue($entity, $value);
|
||||
}
|
||||
}
|
||||
|
104
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php
Normal file
104
tests/Doctrine/Tests/ORM/Functional/Ticket/DDC522Test.php
Normal file
@ -0,0 +1,104 @@
|
||||
<?php
|
||||
|
||||
namespace Doctrine\Tests\ORM\Functional\Ticket;
|
||||
|
||||
use Doctrine\Tests\Models\Company\CompanyPerson;
|
||||
|
||||
require_once __DIR__ . '/../../../TestInit.php';
|
||||
|
||||
/**
|
||||
* Tests that join columns (foreign keys) can be named the same as the association
|
||||
* fields they're used on without causing issues.
|
||||
*/
|
||||
class DDC522Test extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||
{
|
||||
protected function setUp()
|
||||
{
|
||||
parent::setUp();
|
||||
try {
|
||||
$this->_schemaTool->createSchema(array(
|
||||
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC522Customer'),
|
||||
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC522Cart'),
|
||||
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC522ForeignKeyTest')
|
||||
));
|
||||
} catch(\Exception $e) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @group DDC-522
|
||||
*/
|
||||
public function testJoinColumnWithSameNameAsAssociationField()
|
||||
{
|
||||
//$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
|
||||
|
||||
$cust = new DDC522Customer;
|
||||
$cust->name = "name";
|
||||
$cart = new DDC522Cart;
|
||||
$cart->total = 0;
|
||||
$cust->cart = $cart;
|
||||
$cart->customer = $cust;
|
||||
$this->_em->persist($cust);
|
||||
$this->_em->persist($cart);
|
||||
$this->_em->flush();
|
||||
|
||||
$this->_em->clear();
|
||||
|
||||
$r = $this->_em->createQuery("select ca,c from ".get_class($cart)." ca join ca.customer c")
|
||||
->getResult();
|
||||
|
||||
$this->assertTrue($r[0] instanceof DDC522Cart);
|
||||
$this->assertTrue($r[0]->customer instanceof DDC522Customer);
|
||||
$this->assertFalse($r[0]->customer instanceof \Doctrine\ORM\Proxy\Proxy);
|
||||
$this->assertEquals('name', $r[0]->customer->name);
|
||||
|
||||
$fkt = new DDC522ForeignKeyTest();
|
||||
$fkt->cartId = $r[0]->id; // ignored for persistence
|
||||
$fkt->cart = $r[0]; // must be set properly
|
||||
$this->_em->persist($fkt);
|
||||
$this->_em->flush();
|
||||
$this->_em->clear();
|
||||
|
||||
$fkt2 = $this->_em->find(get_class($fkt), $fkt->id);
|
||||
$this->assertEquals($fkt->cart->id, $fkt2->cartId);
|
||||
$this->assertTrue($fkt2->cart instanceof \Doctrine\ORM\Proxy\Proxy);
|
||||
$this->assertFalse($fkt2->cart->__isInitialized__);
|
||||
}
|
||||
}
|
||||
|
||||
/** @Entity */
|
||||
class DDC522Customer {
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
/** @Column */
|
||||
public $name;
|
||||
/** @OneToOne(targetEntity="DDC522Cart", mappedBy="customer") */
|
||||
public $cart;
|
||||
}
|
||||
|
||||
/** @Entity */
|
||||
class DDC522Cart {
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
/** @Column(type="integer") */
|
||||
public $total;
|
||||
/**
|
||||
* @OneToOne(targetEntity="DDC522Customer", inversedBy="cart")
|
||||
* @JoinColumn(name="customer", referencedColumnName="id")
|
||||
*/
|
||||
public $customer;
|
||||
}
|
||||
|
||||
/** @Entity */
|
||||
class DDC522ForeignKeyTest {
|
||||
/** @Id @Column(type="integer") @GeneratedValue */
|
||||
public $id;
|
||||
/** @Column(type="integer", name="cart_id") */
|
||||
public $cartId;
|
||||
/**
|
||||
* @OneToOne(targetEntity="DDC522Cart")
|
||||
* @JoinColumn(name="cart_id", referencedColumnName="id")
|
||||
*/
|
||||
public $cart;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user