1<?php 2/* 3 * $Id$ 4 * 5 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 6 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 7 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 8 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 9 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 10 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 11 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 12 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 13 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 14 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 15 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 16 * 17 * This software consists of voluntary contributions made by many individuals 18 * and is licensed under the LGPL. For more information, see 19 * <http://www.doctrine-project.org>. 20 */ 21 22/** 23 * Doctrine_Ticket_912_TestCase 24 * 25 * @package Doctrine 26 * @author David Stendardi <david.stendardi@adenclassifieds.com> 27 * @category Object Relational Mapping 28 * @link www.doctrine-project.org 29 * @since 1.0 30 * @version $Revision$ 31 */ 32class Doctrine_Ticket_912_TestCase extends Doctrine_UnitTestCase { 33 34 /** 35 * prepareData 36 */ 37 38 public function prepareData() 39 { 40 $oResume = new ticket912_Resume; 41 $oResume->title = 'titre'; 42 $oResume->Person->name = 'David'; 43 $oResume->KnownLanguages[0]->comments = 'foo'; 44 $oResume->KnownLanguages[0]->Language->label = "Enlish"; 45 $oResume->KnownLanguages[0]->Level->label = "Fluent"; 46 $oResume->save(); 47 } 48 49 /** 50 * prepareTables 51 */ 52 53 public function prepareTables() 54 { 55 $this->tables = array(); 56 $this->tables[] = 'ticket912_Resume'; 57 $this->tables[] = 'ticket912_Person'; 58 $this->tables[] = 'ticket912_ResumeHasLanguage'; 59 $this->tables[] = 'ticket912_LanguageLevel'; 60 $this->tables[] = 'ticket912_Language'; 61 62 parent :: prepareTables(); 63 } 64 65 66 /** 67 * Test the existence expected indexes 68 */ 69 70 public function testTicket() 71 { 72 $q = new Doctrine_Query(); 73 74 // simple query with deep relations 75 $q->addSelect('Resume.id, Person.id, Person.name, KnownLanguages.id, Level.label, Language.label') 76 ->from('ticket912_Resume Resume') 77 ->leftJoin('Resume.Person Person') 78 ->leftJoin('Resume.KnownLanguages KnownLanguages') 79 ->leftJoin('KnownLanguages.Level Level') 80 ->leftJoin('KnownLanguages.Language Language'); 81 82 $aResult = $q->fetchArray(); 83 84 // should be setted.. 85 $issetLevel = isset($aResult[0]['KnownLanguages'][0]['Level']); 86 $issetLanguage = isset($aResult[0]['KnownLanguages'][0]['Language']); 87 88 $this->assertTrue($issetLevel); 89 $this->assertTrue($issetLanguage); 90 91 } 92} 93 94 95/** 96 * This class has been auto-generated by the Doctrine ORM Framework 97 */ 98 99class ticket912_Resume extends Doctrine_Record 100{ 101 /** 102 * setTableDefinition 103 */ 104 105 public function setTableDefinition() 106 { 107 $this->setTableName('resume'); 108 $this->hasColumn('id', 'integer', 8, array ( 109 'primary' => true, 110 'autoincrement' => true, 111 'unsigned' => true, 112 )); 113 114 $this->hasColumn('person_id', 'integer', 8, array('unsigned' => true)); 115 $this->hasColumn('title', 'string', 255); 116 } 117 118 /** 119 * setUp 120 */ 121 122 public function setUp() 123 { 124 $this->hasMany('ticket912_ResumeHasLanguage as KnownLanguages', array('local' => 'id', 'foreign' => 'resume_id')); 125 126 $this->hasOne('ticket912_Person as Person', array( 127 'local' => 'person_id', 128 'foreign' => 'id', 129 'onDelete' => 'SET NULL', 130 'onUpdate' => 'CASCADE' 131 )); 132 } 133} 134 135/** 136 * First level one to one relation class Language 137 */ 138class ticket912_Person extends Doctrine_Record 139{ 140 /** 141 * setTableDefinition 142 */ 143 144 public function setTableDefinition() 145 { 146 $this->setTableName('person'); 147 $this->hasColumn('id', 'integer', 8, array ( 148 'primary' => true, 149 'autoincrement' => true, 150 'unsigned' => true, 151 )); 152 153 $this->hasColumn('name', 'string', 255, array ()); 154 } 155} 156 157 158/** 159 * Second level one to many relation class ResumeHasLanguageLanguage 160 */ 161 162class ticket912_ResumeHasLanguage extends Doctrine_Record 163{ 164 /** 165 * setTableDefinition 166 */ 167 168 public function setTableDefinition() 169 { 170 $this->setTableName('resume_has_language'); 171 $this->hasColumn('id', 'integer', 8, array ( 172 'primary' => true, 173 'autoincrement' => true, 174 'unsigned' => true, 175 )); 176 177 $this->hasColumn('resume_id', 'integer', 8, array ( 178 'notnull' => true, 179 'unsigned' => true, 180 )); 181 182 $this->hasColumn('language_id', 'integer', 2, array ( 183 'unsigned' => true, 184 )); 185 186 $this->hasColumn('language_level_id', 'integer', 2, array ( 187 'unsigned' => true, 188 )); 189 190 $this->hasColumn('comments', 'string', 4000, array ()); 191 192 } 193 194 /** 195 * setUp 196 */ 197 198 public function setUp() 199 { 200 $this->hasOne('ticket912_Resume as Resume', array('local' => 'resume_id', 201 'foreign' => 'id', 202 'onDelete' => 'CASCADE', 203 'onUpdate' => 'CASCADE')); 204 205 $this->hasOne('ticket912_Language as Language', array('local' => 'language_id', 206 'foreign' => 'id', 207 'onDelete' => 'CASCADE', 208 'onUpdate' => 'CASCADE')); 209 210 $this->hasOne('ticket912_LanguageLevel as Level', array('local' => 'language_level_id', 211 'foreign' => 'id', 212 'onDelete' => 'SET NULL', 213 'onUpdate' => 'CASCADE')); 214 } 215} 216 217 218 219/** 220 * Third level one to one relation class Language 221 */ 222class ticket912_Language extends Doctrine_Record 223{ 224 /** 225 * setTableDefinition 226 */ 227 228 public function setTableDefinition() 229 { 230 $this->setTableName('language'); 231 $this->hasColumn('id', 'integer', 2, array( 232 'primary' => true, 233 'autoincrement' => true, 234 'unsigned' => true, 235 )); 236 237 $this->hasColumn('label', 'string', 100, array ('notnull' => true)); 238 } 239 240 /** 241 * setup 242 */ 243 244 public function setUp() 245 { 246 $this->hasMany('ticket912_Resume as Resumes', array('local' => 'id', 'foreign' => 'language_id')); 247 $this->hasMany('ticket912_ResumeHasLanguage as ResumeKnownLanguages', array('local' => 'id', 'foreign' => 'language_id')); 248 } 249} 250 251/** 252 * Third level one to one relation class Language 253 */ 254 255class ticket912_LanguageLevel extends Doctrine_Record 256{ 257 /** 258 * setTableDefinition 259 */ 260 261 public function setTableDefinition() 262 { 263 $this->setTableName('language_level'); 264 $this->hasColumn('id', 'integer', 2, array ( 265 'primary' => true, 266 'autoincrement' => true, 267 'unsigned' => true, 268 )); 269 270 $this->hasColumn('label', 'string', 100, array ('notnull' => true)); 271 } 272 273 /** 274 * setUp 275 */ 276 277 public function setUp() 278 { 279 $this->hasMany('ticket912_ResumeHasLanguage as ResumeKnownLanguages', array( 280 'local' => 'id', 281 'foreign' => 'language_level_id')); 282 } 283}