3 namespace Doctrine\Tests\ORM\Functional\Ticket;
5 use Doctrine\Tests\Models\Company\CompanyPerson;
7 require_once __DIR__ . '/../../../TestInit.php';
10 * Tests that join columns (foreign keys) can be named the same as the association
11 * fields they're used on without causing issues.
13 class DDC522Test extends \Doctrine\Tests\OrmFunctionalTestCase
15 protected function setUp()
19 $this->_schemaTool->createSchema(array(
20 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC522Customer'),
21 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC522Cart'),
22 $this->_em->getClassMetadata(__NAMESPACE__ . '\DDC522ForeignKeyTest')
24 } catch(\Exception $e) {
32 public function testJoinColumnWithSameNameAsAssociationField()
34 //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
36 $cust = new DDC522Customer;
38 $cart = new DDC522Cart;
41 $cart->customer = $cust;
42 $this->_em->persist($cust);
43 $this->_em->persist($cart);
48 $r = $this->_em->createQuery("select ca,c from ".get_class($cart)." ca join ca.customer c")
51 $this->assertInstanceOf(__NAMESPACE__ . '\DDC522Cart', $r[0]);
52 $this->assertInstanceOf(__NAMESPACE__ . '\DDC522Customer', $r[0]->customer);
53 $this->assertNotInstanceOf('Doctrine\ORM\Proxy\Proxy', $r[0]->customer);
54 $this->assertEquals('name', $r[0]->customer->name);
56 $fkt = new DDC522ForeignKeyTest();
57 $fkt->cartId = $r[0]->id; // ignored for persistence
58 $fkt->cart = $r[0]; // must be set properly
59 $this->_em->persist($fkt);
63 $fkt2 = $this->_em->find(get_class($fkt), $fkt->id);
64 $this->assertEquals($fkt->cart->id, $fkt2->cartId);
65 $this->assertInstanceOf('Doctrine\ORM\Proxy\Proxy', $fkt2->cart);
66 $this->assertFalse($fkt2->cart->__isInitialized__);
73 public function testJoinColumnWithNullSameNameAssociationField()
75 $fkCust = new DDC522ForeignKeyTest;
76 $fkCust->name = "name";
79 $this->_em->persist($fkCust);
83 $newCust = $this->_em->find(get_class($fkCust), $fkCust->id);
88 class DDC522Customer {
89 /** @Id @Column(type="integer") @GeneratedValue */
93 /** @OneToOne(targetEntity="DDC522Cart", mappedBy="customer") */
99 /** @Id @Column(type="integer") @GeneratedValue */
101 /** @Column(type="integer") */
104 * @OneToOne(targetEntity="DDC522Customer", inversedBy="cart")
105 * @JoinColumn(name="customer", referencedColumnName="id")
111 class DDC522ForeignKeyTest {
112 /** @Id @Column(type="integer") @GeneratedValue */
114 /** @Column(type="integer", name="cart_id", nullable=true) */
117 * @OneToOne(targetEntity="DDC522Cart")
118 * @JoinColumn(name="cart_id", referencedColumnName="id")