Rajout de doctrine/orm
[zf2.biz/galerie.git] / vendor / doctrine / orm / tests / Doctrine / Tests / Models / CMS / CmsUser.php
1 <?php
2
3 namespace Doctrine\Tests\Models\CMS;
4
5 use Doctrine\Common\Collections\ArrayCollection;
6
7 /**
8  * @Entity
9  * @Table(name="cms_users")
10  * @NamedQueries({
11  *     @NamedQuery(name="all", query="SELECT u FROM __CLASS__ u")
12  * })
13  *
14  * @NamedNativeQueries({
15  *      @NamedNativeQuery(
16  *          name           = "fetchIdAndUsernameWithResultClass",
17  *          resultClass    = "CmsUser",
18  *          query          = "SELECT id, username FROM cms_users WHERE username = ?"
19  *      ),
20  *      @NamedNativeQuery(
21  *          name           = "fetchAllColumns",
22  *          resultClass    = "CmsUser",
23  *          query          = "SELECT * FROM cms_users WHERE username = ?"
24  *      ),
25  *      @NamedNativeQuery(
26  *          name            = "fetchJoinedAddress",
27  *          resultSetMapping= "mappingJoinedAddress",
28  *          query           = "SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?"
29  *      ),
30  *      @NamedNativeQuery(
31  *          name            = "fetchJoinedPhonenumber",
32  *          resultSetMapping= "mappingJoinedPhonenumber",
33  *          query           = "SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?"
34  *      ),
35  *      @NamedNativeQuery(
36  *          name            = "fetchUserPhonenumberCount",
37  *          resultSetMapping= "mappingUserPhonenumberCount",
38  *          query           = "SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username"
39  *      ),
40  *      @NamedNativeQuery(
41  *          name            = "fetchMultipleJoinsEntityResults",
42  *          resultSetMapping= "mappingMultipleJoinsEntityResults",
43  *          query           = "SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username"
44  *      ),
45  * })
46  *
47  * @SqlResultSetMappings({
48  *      @SqlResultSetMapping(
49  *          name    = "mappingJoinedAddress",
50  *          entities= {
51  *              @EntityResult(
52  *                  entityClass = "__CLASS__",
53  *                  fields      = {
54  *                      @FieldResult(name = "id"),
55  *                      @FieldResult(name = "name"),
56  *                      @FieldResult(name = "status"),
57  *                      @FieldResult(name = "address.zip"),
58  *                      @FieldResult(name = "address.city"),
59  *                      @FieldResult(name = "address.country"),
60  *                      @FieldResult(name = "address.id", column = "a_id"),
61  *                  }
62  *              )
63  *          }
64  *      ),
65  *      @SqlResultSetMapping(
66  *          name    = "mappingJoinedPhonenumber",
67  *          entities= {
68  *              @EntityResult(
69  *                  entityClass = "CmsUser",
70  *                  fields      = {
71  *                      @FieldResult("id"),
72  *                      @FieldResult("name"),
73  *                      @FieldResult("status"),
74  *                      @FieldResult("phonenumbers.phonenumber" , column = "number"),
75  *                  }
76  *              )
77  *          }
78  *      ),
79  *      @SqlResultSetMapping(
80  *          name    = "mappingUserPhonenumberCount",
81  *          entities= {
82  *              @EntityResult(
83  *                  entityClass = "CmsUser",
84  *                  fields      = {
85  *                      @FieldResult(name = "id"),
86  *                      @FieldResult(name = "name"),
87  *                      @FieldResult(name = "status"),
88  *                  }
89  *              )
90  *          },
91  *          columns = {
92  *              @ColumnResult("numphones")
93  *          }
94  *      ),
95  *      @SqlResultSetMapping(
96  *          name    = "mappingMultipleJoinsEntityResults",
97  *          entities= {
98  *              @EntityResult(
99  *                  entityClass = "__CLASS__",
100  *                  fields      = {
101  *                      @FieldResult(name = "id",       column="u_id"),
102  *                      @FieldResult(name = "name",     column="u_name"),
103  *                      @FieldResult(name = "status",   column="u_status"),
104  *                  }
105  *              ),
106  *              @EntityResult(
107  *                  entityClass = "CmsAddress",
108  *                  fields      = {
109  *                      @FieldResult(name = "id",       column="a_id"),
110  *                      @FieldResult(name = "zip",      column="a_zip"),
111  *                      @FieldResult(name = "country",  column="a_country"),
112  *                  }
113  *              )
114  *          },
115  *          columns = {
116  *              @ColumnResult("numphones")
117  *          }
118  *      )
119  * })
120  */
121 class CmsUser
122 {
123     /**
124      * @Id @Column(type="integer")
125      * @GeneratedValue
126      */
127     public $id;
128     /**
129      * @Column(type="string", length=50, nullable=true)
130      */
131     public $status;
132     /**
133      * @Column(type="string", length=255, unique=true)
134      */
135     public $username;
136     /**
137      * @Column(type="string", length=255)
138      */
139     public $name;
140     /**
141      * @OneToMany(targetEntity="CmsPhonenumber", mappedBy="user", cascade={"persist", "merge"}, orphanRemoval=true)
142      */
143     public $phonenumbers;
144     /**
145      * @OneToMany(targetEntity="CmsArticle", mappedBy="user", cascade={"detach"})
146      */
147     public $articles;
148     /**
149      * @OneToOne(targetEntity="CmsAddress", mappedBy="user", cascade={"persist"}, orphanRemoval=true)
150      */
151     public $address;
152     /**
153      * @OneToOne(targetEntity="CmsEmail", inversedBy="user", cascade={"persist"}, orphanRemoval=true)
154      * @JoinColumn(referencedColumnName="id", nullable=true)
155      */
156     public $email;
157     /**
158      * @ManyToMany(targetEntity="CmsGroup", inversedBy="users", cascade={"persist", "merge", "detach"})
159      * @JoinTable(name="cms_users_groups",
160      *      joinColumns={@JoinColumn(name="user_id", referencedColumnName="id")},
161      *      inverseJoinColumns={@JoinColumn(name="group_id", referencedColumnName="id")}
162      *      )
163      */
164     public $groups;
165
166     public $nonPersistedProperty;
167
168     public $nonPersistedPropertyObject;
169
170     public function __construct() {
171         $this->phonenumbers = new ArrayCollection;
172         $this->articles = new ArrayCollection;
173         $this->groups = new ArrayCollection;
174     }
175
176     public function getId() {
177         return $this->id;
178     }
179
180     public function getStatus() {
181         return $this->status;
182     }
183
184     public function getUsername() {
185         return $this->username;
186     }
187
188     public function getName() {
189         return $this->name;
190     }
191
192     /**
193      * Adds a phonenumber to the user.
194      *
195      * @param CmsPhonenumber $phone
196      */
197     public function addPhonenumber(CmsPhonenumber $phone) {
198         $this->phonenumbers[] = $phone;
199         $phone->setUser($this);
200     }
201
202     public function getPhonenumbers() {
203         return $this->phonenumbers;
204     }
205
206     public function addArticle(CmsArticle $article) {
207         $this->articles[] = $article;
208         $article->setAuthor($this);
209     }
210
211     public function addGroup(CmsGroup $group) {
212         $this->groups[] = $group;
213         $group->addUser($this);
214     }
215
216     public function getGroups() {
217         return $this->groups;
218     }
219
220     public function removePhonenumber($index) {
221         if (isset($this->phonenumbers[$index])) {
222             $ph = $this->phonenumbers[$index];
223             unset($this->phonenumbers[$index]);
224             $ph->user = null;
225             return true;
226         }
227         return false;
228     }
229
230     public function getAddress() { return $this->address; }
231
232     public function setAddress(CmsAddress $address) {
233         if ($this->address !== $address) {
234             $this->address = $address;
235             $address->setUser($this);
236         }
237     }
238
239     public function getEmail() { return $this->email; }
240
241     public function setEmail(CmsEmail $email = null) {
242         if ($this->email !== $email) {
243             $this->email = $email;
244
245             if ($email) {
246                 $email->setUser($this);
247             }
248         }
249     }
250
251     public static function loadMetadata(\Doctrine\ORM\Mapping\ClassMetadataInfo $metadata)
252     {
253         $metadata->setPrimaryTable(array(
254            'name' => 'cms_users',
255         ));
256
257         $metadata->addNamedNativeQuery(array (
258             'name'              => 'fetchIdAndUsernameWithResultClass',
259             'query'             => 'SELECT id, username FROM cms_users WHERE username = ?',
260             'resultClass'       => 'Doctrine\\Tests\\Models\\CMS\\CmsUser',
261         ));
262
263         $metadata->addNamedNativeQuery(array (
264             'name'              => 'fetchAllColumns',
265             'query'             => 'SELECT * FROM cms_users WHERE username = ?',
266             'resultClass'       => 'Doctrine\\Tests\\Models\\CMS\\CmsUser',
267         ));
268
269         $metadata->addNamedNativeQuery(array (
270             'name'              => 'fetchJoinedAddress',
271             'query'             => 'SELECT u.id, u.name, u.status, a.id AS a_id, a.country, a.zip, a.city FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id WHERE u.username = ?',
272             'resultSetMapping'  => 'mappingJoinedAddress',
273         ));
274
275         $metadata->addNamedNativeQuery(array (
276             'name'              => 'fetchJoinedPhonenumber',
277             'query'             => 'SELECT id, name, status, phonenumber AS number FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username = ?',
278             'resultSetMapping'  => 'mappingJoinedPhonenumber',
279         ));
280
281         $metadata->addNamedNativeQuery(array (
282             'name'              => 'fetchUserPhonenumberCount',
283             'query'             => 'SELECT id, name, status, COUNT(phonenumber) AS numphones FROM cms_users INNER JOIN cms_phonenumbers ON id = user_id WHERE username IN (?) GROUP BY id, name, status, username ORDER BY username',
284             'resultSetMapping'  => 'mappingUserPhonenumberCount',
285         ));
286
287         $metadata->addNamedNativeQuery(array (
288             "name"              => "fetchMultipleJoinsEntityResults",
289             "resultSetMapping"  => "mappingMultipleJoinsEntityResults",
290             "query"             => "SELECT u.id AS u_id, u.name AS u_name, u.status AS u_status, a.id AS a_id, a.zip AS a_zip, a.country AS a_country, COUNT(p.phonenumber) AS numphones FROM cms_users u INNER JOIN cms_addresses a ON u.id = a.user_id INNER JOIN cms_phonenumbers p ON u.id = p.user_id GROUP BY u.id, u.name, u.status, u.username, a.id, a.zip, a.country ORDER BY u.username"
291         ));
292
293         $metadata->addSqlResultSetMapping(array (
294             'name'      => 'mappingJoinedAddress',
295             'columns'   => array(),
296             'entities'  => array(array (
297                 'fields'=> array (
298                   array (
299                     'name'      => 'id',
300                     'column'    => 'id',
301                   ),
302                   array (
303                     'name'      => 'name',
304                     'column'    => 'name',
305                   ),
306                   array (
307                     'name'      => 'status',
308                     'column'    => 'status',
309                   ),
310                   array (
311                     'name'      => 'address.zip',
312                     'column'    => 'zip',
313                   ),
314                   array (
315                     'name'      => 'address.city',
316                     'column'    => 'city',
317                   ),
318                   array (
319                     'name'      => 'address.country',
320                     'column'    => 'country',
321                   ),
322                   array (
323                     'name'      => 'address.id',
324                     'column'    => 'a_id',
325                   ),
326                 ),
327                 'entityClass'           => 'Doctrine\Tests\Models\CMS\CmsUser',
328                 'discriminatorColumn'   => null
329               ),
330             ),
331         ));
332
333         $metadata->addSqlResultSetMapping(array (
334             'name'      => 'mappingJoinedPhonenumber',
335             'columns'   => array(),
336             'entities'  => array(array(
337                 'fields'=> array (
338                   array (
339                     'name'      => 'id',
340                     'column'    => 'id',
341                   ),
342                   array (
343                     'name'      => 'name',
344                     'column'    => 'name',
345                   ),
346                   array (
347                     'name'      => 'status',
348                     'column'    => 'status',
349                   ),
350                   array (
351                     'name'      => 'phonenumbers.phonenumber',
352                     'column'    => 'number',
353                   ),
354                 ),
355                 'entityClass'   => 'Doctrine\\Tests\\Models\\CMS\\CmsUser',
356                 'discriminatorColumn'   => null
357               ),
358             ),
359         ));
360
361         $metadata->addSqlResultSetMapping(array (
362             'name'      => 'mappingUserPhonenumberCount',
363             'columns'   => array(),
364             'entities'  => array (
365               array(
366                 'fields' => array (
367                   array (
368                     'name'      => 'id',
369                     'column'    => 'id',
370                   ),
371                   array (
372                     'name'      => 'name',
373                     'column'    => 'name',
374                   ),
375                   array (
376                     'name'      => 'status',
377                     'column'    => 'status',
378                   )
379                 ),
380                 'entityClass'   => 'Doctrine\Tests\Models\CMS\CmsUser',
381                 'discriminatorColumn'   => null
382               )
383             ),
384             'columns' => array (
385                   array (
386                     'name' => 'numphones',
387                   )
388             )
389         ));
390         
391         $metadata->addSqlResultSetMapping(array(
392             'name'      => 'mappingMultipleJoinsEntityResults',
393             'entities'  => array(array(
394                     'fields' => array(
395                         array(
396                             'name'      => 'id',
397                             'column'    => 'u_id',
398                         ),
399                         array(
400                             'name'      => 'name',
401                             'column'    => 'u_name',
402                         ),
403                         array(
404                             'name'      => 'status',
405                             'column'    => 'u_status',
406                         )
407                     ),
408                     'entityClass'           => 'Doctrine\Tests\Models\CMS\CmsUser',
409                     'discriminatorColumn'   => null,
410                 ),
411                 array(
412                     'fields' => array(
413                         array(
414                             'name'      => 'id',
415                             'column'    => 'a_id',
416                         ),
417                         array(
418                             'name'      => 'zip',
419                             'column'    => 'a_zip',
420                         ),
421                         array(
422                             'name'      => 'country',
423                             'column'    => 'a_country',
424                         ),
425                     ),
426                     'entityClass'           => 'Doctrine\Tests\Models\CMS\CmsAddress',
427                     'discriminatorColumn'   => null,
428                 ),
429             ),
430             'columns' => array(array(
431                     'name' => 'numphones',
432                 )
433             )
434         ));
435
436     }
437 }