OJTICDog
last analyzed

Complexity

Total Complexity 0

Size/Duplication

Total Lines 2
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 1
dl 0
loc 2
c 0
b 0
f 0
wmc 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Doctrine\Tests\ORM\Functional;
6
7
use Doctrine\ORM\Annotation as ORM;
8
use Doctrine\Tests\OrmFunctionalTestCase;
9
use Exception;
10
11
/**
12
 * Functional tests for the Single Table Inheritance mapping strategy.
13
 */
14
class OrderedJoinedTableInheritanceCollectionTest extends OrmFunctionalTestCase
15
{
16
    protected function setUp() : void
17
    {
18
        parent::setUp();
19
        try {
20
            $this->schemaTool->createSchema(
21
                [
22
                    $this->em->getClassMetadata(OJTICPet::class),
23
                    $this->em->getClassMetadata(OJTICCat::class),
24
                    $this->em->getClassMetadata(OJTICDog::class),
25
                ]
26
            );
27
        } catch (Exception $e) {
28
            // Swallow all exceptions. We do not test the schema tool here.
29
        }
30
31
        $dog       = new OJTICDog();
32
        $dog->name = 'Poofy';
33
34
        $dog1       = new OJTICDog();
35
        $dog1->name = 'Zampa';
36
        $dog2       = new OJTICDog();
37
        $dog2->name = 'Aari';
38
39
        $dog1->mother = $dog;
40
        $dog2->mother = $dog;
41
42
        $dog->children[] = $dog1;
43
        $dog->children[] = $dog2;
44
45
        $this->em->persist($dog);
46
        $this->em->persist($dog1);
47
        $this->em->persist($dog2);
48
        $this->em->flush();
49
        $this->em->clear();
50
    }
51
52
    public function testOrderdOneToManyCollection() : void
53
    {
54
        $poofy = $this->em->createQuery("SELECT p FROM Doctrine\Tests\ORM\Functional\OJTICPet p WHERE p.name = 'Poofy'")->getSingleResult();
55
56
        self::assertEquals('Aari', $poofy->children[0]->getName());
57
        self::assertEquals('Zampa', $poofy->children[1]->getName());
58
59
        $this->em->clear();
60
61
        $result = $this->em->createQuery(
62
            "SELECT p, c FROM Doctrine\Tests\ORM\Functional\OJTICPet p JOIN p.children c WHERE p.name = 'Poofy'"
63
        )
64
                ->getResult();
65
66
        self::assertCount(1, $result);
67
        $poofy = $result[0];
68
69
        self::assertEquals('Aari', $poofy->children[0]->getName());
70
        self::assertEquals('Zampa', $poofy->children[1]->getName());
71
    }
72
}
73
74
/**
75
 * @ORM\Entity
76
 * @ORM\InheritanceType("JOINED")
77
 * @ORM\DiscriminatorColumn(name="discr", type="string")
78
 * @ORM\DiscriminatorMap({
79
 *      "cat" = OJTICCat::class,
80
 *      "dog" = OJTICDog::class
81
 * })
82
 */
83
abstract class OJTICPet
84
{
85
    /**
86
     * @ORM\Id
87
     * @ORM\Column(type="integer")
88
     * @ORM\GeneratedValue(strategy="AUTO")
89
     */
90
    public $id;
91
92
    /** @ORM\Column */
93
    public $name;
94
95
    /** @ORM\ManyToOne(targetEntity=OJTICPET::class) */
96
    public $mother;
97
98
    /**
99
     * @ORM\OneToMany(targetEntity=OJTICPet::class, mappedBy="mother")
100
     * @ORM\OrderBy({"name" = "ASC"})
101
     */
102
    public $children;
103
104
    /**
105
     * @ORM\ManyToMany(targetEntity=OJTICPet::class)
106
     * @ORM\JoinTable(name="OTJICPet_Friends",
107
     *     joinColumns={@ORM\JoinColumn(name="pet_id", referencedColumnName="id")},
108
     *     inverseJoinColumns={@ORM\JoinColumn(name="friend_id", referencedColumnName="id")})
109
     * @ORM\OrderBy({"name" = "ASC"})
110
     */
111
    public $friends;
112
113
    public function getName()
114
    {
115
        return $this->name;
116
    }
117
}
118
119
/**
120
 * @ORM\Entity
121
 */
122
class OJTICCat extends OJTICPet
123
{
124
}
125
126
/**
127
 * @ORM\Entity
128
 */
129
class OJTICDog extends OJTICPet
130
{
131
}
132