1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
<?php
namespace Doctrine\Tests\ORM\Functional;
use Doctrine\Tests\Models\ECommerce\ECommerceProduct;
use Doctrine\Tests\Models\ECommerce\ECommerceShipping;
use Doctrine\ORM\Mapping\AssociationMapping;
use Doctrine\ORM\Query;
require_once __DIR__ . '/../../TestInit.php';
/**
* Tests a unidirectional one-to-one association mapping (without inheritance).
* Inverse side is not present.
*/
class OneToOneUnidirectionalAssociationTest extends \Doctrine\Tests\OrmFunctionalTestCase
{
private $product;
private $shipping;
protected function setUp()
{
$this->useModelSet('ecommerce');
parent::setUp();
$this->product = new ECommerceProduct();
$this->product->setName('Doctrine 2 Manual');
$this->shipping = new ECommerceShipping();
$this->shipping->setDays('5');
}
public function testSavesAOneToOneAssociationWithCascadeSaveSet() {
$this->product->setShipping($this->shipping);
$this->_em->persist($this->product);
$this->_em->flush();
$this->assertForeignKeyIs($this->shipping->getId());
}
public function testRemovesOneToOneAssociation()
{
$this->product->setShipping($this->shipping);
$this->_em->persist($this->product);
$this->product->removeShipping();
$this->_em->flush();
$this->assertForeignKeyIs(null);
}
public function _testEagerLoad()
{
$this->_createFixture();
$query = $this->_em->createQuery('select p, s from Doctrine\Tests\Models\ECommerce\ECommerceProduct p left join p.shipping s');
$result = $query->getResult();
$product = $result[0];
$this->assertTrue($product->getShipping() instanceof ECommerceShipping);
$this->assertEquals(1, $product->getShipping()->getDays());
}
public function testLazyLoadsObjects() {
$this->_createFixture();
$metadata = $this->_em->getClassMetadata('Doctrine\Tests\Models\ECommerce\ECommerceProduct');
$metadata->getAssociationMapping('shipping')->fetchMode = AssociationMapping::FETCH_LAZY;
$query = $this->_em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p');
$result = $query->getResult();
$product = $result[0];
$this->assertTrue($product->getShipping() instanceof ECommerceShipping);
$this->assertEquals(1, $product->getShipping()->getDays());
}
public function testDoesNotLazyLoadObjectsIfConfigurationDoesNotAllowIt() {
$this->_createFixture();
$query = $this->_em->createQuery('select p from Doctrine\Tests\Models\ECommerce\ECommerceProduct p');
$query->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true);
$result = $query->getResult();
$product = $result[0];
$this->assertNull($product->getShipping());
}
protected function _createFixture()
{
$product = new ECommerceProduct;
$product->setName('Php manual');
$shipping = new ECommerceShipping;
$shipping->setDays('1');
$product->setShipping($shipping);
$this->_em->persist($product);
$this->_em->flush();
$this->_em->clear();
}
public function assertForeignKeyIs($value) {
$foreignKey = $this->_em->getConnection()->execute('SELECT shipping_id FROM ecommerce_products WHERE id=?', array($this->product->getId()))->fetchColumn();
$this->assertEquals($value, $foreignKey);
}
}