Views
7 months ago

Doctrine_manual-1-2-en

Chapter 16: Behaviors

Chapter 16: Behaviors 248 Listing 16-25 --- BlogPost: actAs: Versionable: versionColumn: version className: %CLASS%Version auditLog: true columns: title: string(255) body: clob The auditLog option can be used to turn off the audit log history. This is when you want to maintain a version number but not maintain the data at each version. Lets check the SQL that is generated by the above models: Listing 16-26 // test.php Listing 16-27 // ... $sql = Doctrine_Core::generateSqlFromArray(array('BlogPost')); echo $sql[0] . "\n"; echo $sql[1]; The above code would output the following SQL query: CREATE TABLE blog_post_version (id BIGINT, title VARCHAR(255), body LONGTEXT, version BIGINT, PRIMARY KEY(id, version)) ENGINE = INNODB CREATE TABLE blog_post (id BIGINT AUTO_INCREMENT, title VARCHAR(255), body LONGTEXT, version BIGINT, PRIMARY KEY(id)) ENGINE = INNODB ALTER TABLE blog_post_version ADD FOREIGN KEY (id) REFERENCES blog_post(id) ON UPDATE CASCADE ON DELETE CASCADE Notice how we have 2 additional statements we probably didn't expect to see. The behavior automatically created a blog_post_version table and related it to blog_post. Listing 16-28 Now when we insert or update a BlogPost the version table will store all the old versions of the record and allow you to revert back at anytime. When you instantiate a BlogPost for the first time this is what is happening internally: • It creates a class called BlogPostVersion on-the-fly, the table this record is pointing at is blog_post_version • Everytime a BlogPost object is deleted / updated the previous version is stored into blog_post_version • Everytime a BlogPost object is updated its version number is increased. Now lets play around with the BlogPost model: $blogPost = new BlogPost(); $blogPost->title = 'Test blog post'; ----------------- Brought to you by

Chapter 16: Behaviors 249 $blogPost->body = 'test'; $blogPost->save(); $blogPost->title = 'Modified blog post title'; $blogPost->save(); print_r($blogPost->toArray()); The above example would produce the following output: $ php test.php Array ( [id] => 1 [title] => Modified blog post title [body] => test [version] => 2 ) Listing 16-29 Notice how the value of the version column is 2. This is because we have saved 2 versions of the BlogPost model. We can easily revert to another version by using the revert() method that the behavior includes. Lets revert back to the first version: $blogPost->revert(1); print_r($blogPost->toArray()); Listing 16-30 The above example would produce the following output: $ php test.php Array ( [id] => 2 [title] => Test blog post [body] => test [version] => 1 ) Listing 16-31 Notice how the value of the version column is set to 1 and the title is back to the original value was set it to when creating the BlogPost. Timestampable The Timestampable behavior will automatically add a created_at and updated_at column and automatically set the values when a record is inserted and updated. Since it is common to want to know the date a post is made lets expand our BlogPost model and add the Timestampable behavior to automatically set these dates for us. // models/BlogPost.php Listing 16-32 class BlogPost extends Doctrine_Record { // ... ----------------- Brought to you by

  • Page 1 and 2:

    Doctrine ORM for PHP Guide to Doctr

  • Page 3 and 4:

    Table of Contents iii Examples ....

  • Page 5 and 6:

    Table of Contents v Sample Queries

  • Page 7 and 8:

    Table of Contents vii Component Que

  • Page 9 and 10:

    Table of Contents ix Inserting a No

  • Page 11 and 12:

    Table of Contents xi Generating Mig

  • Page 13 and 14:

    Chapter 1: Introduction 13 Chapter

  • Page 15 and 16:

    Chapter 1: Introduction 15 layer de

  • Page 17 and 18:

    Chapter 1: Introduction 17 Further

  • Page 19 and 20:

    Chapter 2: Getting Started 19 Insta

  • Page 21 and 22:

    Chapter 2: Getting Started 21 Downl

  • Page 23 and 24:

    Chapter 2: Getting Started 23 In th

  • Page 25 and 26:

    Chapter 3: Introduction to Connecti

  • Page 27 and 28:

    Chapter 3: Introduction to Connecti

  • Page 29 and 30:

    Chapter 3: Introduction to Connecti

  • Page 31 and 32:

    Chapter 4: Configuration 31 $table-

  • Page 33 and 34:

    Chapter 4: Configuration 33 backtic

  • Page 35 and 36:

    Chapter 4: Configuration 35 class M

  • Page 37 and 38:

    Chapter 4: Configuration 37 // boot

  • Page 39 and 40:

    Chapter 5: Connections 39 Chapter 5

  • Page 41 and 42:

    Chapter 5: Connections 41 $conn = D

  • Page 43 and 44:

    Chapter 5: Connections 43 This is p

  • Page 45 and 46:

    Chapter 6: Introduction to Models 4

  • Page 47 and 48:

    Chapter 6: Introduction to Models 4

  • Page 49 and 50:

    Chapter 6: Introduction to Models 4

  • Page 51 and 52:

    Chapter 6: Introduction to Models 5

  • Page 53 and 54:

    Chapter 7: Defining Models 53 Chapt

  • Page 55 and 56:

    Chapter 7: Defining Models 55 } } /

  • Page 57 and 58:

    Chapter 7: Defining Models 57 class

  • Page 59 and 60:

    Chapter 7: Defining Models 59 Strin

  • Page 61 and 62:

    Chapter 7: Defining Models 61 class

  • Page 63 and 64:

    Chapter 7: Defining Models 63 class

  • Page 65 and 66:

    Chapter 7: Defining Models 65 $this

  • Page 67 and 68:

    Chapter 7: Defining Models 67 onUpd

  • Page 69 and 70:

    Chapter 7: Defining Models 69 // te

  • Page 71 and 72:

    Chapter 7: Defining Models 71 First

  • Page 73 and 74:

    Chapter 7: Defining Models 73 } } $

  • Page 75 and 76:

    Chapter 7: Defining Models 75 In ma

  • Page 77 and 78:

    Chapter 7: Defining Models 77 Here

  • Page 79 and 80:

    Chapter 7: Defining Models 79 class

  • Page 81 and 82:

    Chapter 7: Defining Models 81 Here

  • Page 83 and 84:

    Chapter 7: Defining Models 83 } } )

  • Page 85 and 86:

    Chapter 7: Defining Models 85 --- #

  • Page 87 and 88:

    Chapter 7: Defining Models 87 } { }

  • Page 89 and 90:

    Chapter 7: Defining Models 89 } } )

  • Page 91 and 92:

    Chapter 7: Defining Models 91 Some

  • Page 93 and 94:

    Chapter 7: Defining Models 93 Now w

  • Page 95 and 96:

    Chapter 7: Defining Models 95 # ...

  • Page 97 and 98:

    Chapter 7: Defining Models 97 Concl

  • Page 99 and 100:

    Chapter 8: Working with Models 99 $

  • Page 101 and 102:

    Chapter 8: Working with Models 101

  • Page 103 and 104:

    Chapter 8: Working with Models 103

  • Page 105 and 106:

    Chapter 8: Working with Models 105

  • Page 107 and 108:

    Chapter 8: Working with Models 107

  • Page 109 and 110:

    Chapter 8: Working with Models 109

  • Page 111 and 112:

    Chapter 8: Working with Models 111

  • Page 113 and 114:

    Chapter 8: Working with Models 113

  • Page 115 and 116:

    Chapter 8: Working with Models 115

  • Page 117 and 118:

    Chapter 8: Working with Models 117

  • Page 119 and 120:

    Chapter 8: Working with Models 119

  • Page 121 and 122:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 123 and 124:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 125 and 126:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 127 and 128:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 129 and 130:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 131 and 132:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 133 and 134:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 135 and 136:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 137 and 138:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 139 and 140:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 141 and 142:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 143 and 144:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 145 and 146:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 147 and 148:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 149 and 150:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 151 and 152:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 153 and 154:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 155 and 156:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 157 and 158:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 159 and 160:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 161 and 162:

    Chapter 9: DQL (Doctrine Query Lang

  • Page 163 and 164:

    Chapter 10: Component Overview 163

  • Page 165 and 166:

    Chapter 10: Component Overview 165

  • Page 167 and 168:

    Chapter 10: Component Overview 167

  • Page 169 and 170:

    Chapter 10: Component Overview 169

  • Page 171 and 172:

    Chapter 10: Component Overview 171

  • Page 173 and 174:

    Chapter 10: Component Overview 173

  • Page 175 and 176:

    Chapter 10: Component Overview 175

  • Page 177 and 178:

    Chapter 10: Component Overview 177

  • Page 179 and 180:

    Chapter 10: Component Overview 179

  • Page 181 and 182:

    Chapter 10: Component Overview 181

  • Page 183 and 184:

    Chapter 10: Component Overview 183

  • Page 185 and 186:

    Chapter 10: Component Overview 185

  • Page 187 and 188:

    Chapter 10: Component Overview 187

  • Page 189 and 190:

    Chapter 10: Component Overview 189

  • Page 191 and 192:

    Chapter 10: Component Overview 191

  • Page 193 and 194:

    Chapter 11: Native SQL 193 $users =

  • Page 195 and 196:

    Chapter 12: YAML Schema Files 195 C

  • Page 197 and 198: Chapter 12: YAML Schema Files 197 D
  • Page 199 and 200: Chapter 12: YAML Schema Files 199 p
  • Page 201 and 202: Chapter 12: YAML Schema Files 201 -
  • Page 203 and 204: Chapter 12: YAML Schema Files 203 O
  • Page 205 and 206: Chapter 12: YAML Schema Files 205 C
  • Page 207 and 208: Chapter 12: YAML Schema Files 207 o
  • Page 209 and 210: Chapter 13: Data Validation 209 Cha
  • Page 211 and 212: Chapter 13: Data Validation 211 # .
  • Page 213 and 214: Chapter 13: Data Validation 213 The
  • Page 215 and 216: Chapter 13: Data Validation 215 if
  • Page 217 and 218: Chapter 13: Data Validation 217 Her
  • Page 219 and 220: Chapter 13: Data Validation 219 # .
  • Page 221 and 222: Chapter 13: Data Validation 221 } e
  • Page 223 and 224: Chapter 13: Data Validation 223 } }
  • Page 225 and 226: Chapter 13: Data Validation 225 //
  • Page 227 and 228: Chapter 14: Data Hydrators 227 Chap
  • Page 229 and 230: Chapter 14: Data Hydrators 229 echo
  • Page 231 and 232: Chapter 15: Inheritance 231 Chapter
  • Page 233 and 234: Chapter 15: Inheritance 233 columns
  • Page 235 and 236: Chapter 15: Inheritance 235 name: s
  • Page 237 and 238: Chapter 15: Inheritance 237 // test
  • Page 239 and 240: Chapter 16: Behaviors 239 Chapter 1
  • Page 241 and 242: Chapter 16: Behaviors 241 Here is t
  • Page 243 and 244: Chapter 16: Behaviors 243 } $this->
  • Page 245 and 246: Chapter 16: Behaviors 245 The imple
  • Page 247: Chapter 16: Behaviors 247 } } ); )
  • Page 251 and 252: Chapter 16: Behaviors 251 Look how
  • Page 253 and 254: Chapter 16: Behaviors 253 length 25
  • Page 255 and 256: Chapter 16: Behaviors 255 $ php tes
  • Page 257 and 258: Chapter 16: Behaviors 257 Searchabl
  • Page 259 and 260: Chapter 16: Behaviors 259 // test.p
  • Page 261 and 262: Chapter 16: Behaviors 261 } } elsei
  • Page 263 and 264: Chapter 16: Behaviors 263 ) [name]
  • Page 265 and 266: Chapter 16: Behaviors 265 } public
  • Page 267 and 268: Chapter 17: Searching 267 Chapter 1
  • Page 269 and 270: Chapter 17: Searching 269 body LONG
  • Page 271 and 272: Chapter 17: Searching 271 • Strip
  • Page 273 and 274: Chapter 17: Searching 273 $ php tes
  • Page 275 and 276: Chapter 17: Searching 275 // test.p
  • Page 277 and 278: Chapter 18: Hierarchical Data 277 N
  • Page 279 and 280: Chapter 18: Hierarchical Data 279 i
  • Page 281 and 282: Chapter 18: Hierarchical Data 281 E
  • Page 283 and 284: Chapter 18: Hierarchical Data 283 F
  • Page 285 and 286: Chapter 19: Data Fixtures 285 Chapt
  • Page 287 and 288: Chapter 19: Data Fixtures 287 class
  • Page 289 and 290: Chapter 19: Data Fixtures 289 Resou
  • Page 291 and 292: Chapter 19: Data Fixtures 291 --- #
  • Page 293 and 294: Chapter 20: Database Abstraction La
  • Page 295 and 296: Chapter 20: Database Abstraction La
  • Page 297 and 298: Chapter 20: Database Abstraction La
  • Page 299 and 300:

    Chapter 20: Database Abstraction La

  • Page 301 and 302:

    Chapter 20: Database Abstraction La

  • Page 303 and 304:

    Chapter 20: Database Abstraction La

  • Page 305 and 306:

    Chapter 21: Transactions 305 log 43

  • Page 307 and 308:

    Chapter 21: Transactions 307 try {

  • Page 309 and 310:

    Chapter 22: Event Listeners 309 Cha

  • Page 311 and 312:

    Chapter 22: Event Listeners 311 pub

  • Page 313 and 314:

    Chapter 22: Event Listeners 313 pos

  • Page 315 and 316:

    Chapter 22: Event Listeners 315 } {

  • Page 317 and 318:

    Chapter 22: Event Listeners 317 */

  • Page 319 and 320:

    Chapter 22: Event Listeners 319 FRO

  • Page 321 and 322:

    Chapter 22: Event Listeners 321 Ski

  • Page 323 and 324:

    Chapter 23: Caching 323 $cacheDrive

  • Page 325 and 326:

    Chapter 23: Caching 325 // bootstra

  • Page 327 and 328:

    Chapter 24: Migrations 327 Chapter

  • Page 329 and 330:

    Chapter 24: Migrations 329 array('t

  • Page 331 and 332:

    Chapter 24: Migrations 331 { } // .

  • Page 333 and 334:

    Chapter 24: Migrations 333 $options

  • Page 335 and 336:

    Chapter 24: Migrations 335 Up/Down

  • Page 337 and 338:

    Chapter 24: Migrations 337 Now you

  • Page 339 and 340:

    Chapter 25: Extensions 339 $ cd /pa

  • Page 341 and 342:

    Chapter 26: Utilities 341 $pager->g

  • Page 343 and 344:

    Chapter 26: Utilities 343 Currently

  • Page 345 and 346:

    Chapter 26: Utilities 345 Template

  • Page 347 and 348:

    Chapter 26: Utilities 347 Doctrine_

  • Page 349 and 350:

    Chapter 26: Utilities 349 // Possib

  • Page 351 and 352:

    Chapter 26: Utilities 351 // Genera

  • Page 353 and 354:

    Chapter 26: Utilities 353 You can r

  • Page 355 and 356:

    Chapter 26: Utilities 355 The above

  • Page 357 and 358:

    Chapter 27: Unit Testing 357 $ cd /

  • Page 359 and 360:

    Chapter 27: Unit Testing 359 } // .

  • Page 361 and 362:

    Chapter 27: Unit Testing 361 Common

  • Page 363 and 364:

    Chapter 28: Improving Performance 3

  • Page 365 and 366:

    Chapter 28: Improving Performance 3

  • Page 367 and 368:

    Chapter 28: Improving Performance 3

  • Page 369 and 370:

    Chapter 29: Technology 369 Doctrine

  • Page 371 and 372:

    Chapter 29: Technology 371 • Neve

  • Page 373 and 374:

    Chapter 30: Exceptions and Warnings

  • Page 375 and 376:

    Chapter 31: Real World Examples 375

  • Page 377 and 378:

    Chapter 31: Real World Examples 377

  • Page 379 and 380:

    Chapter 31: Real World Examples 379

  • Page 381 and 382:

    Chapter 32: Coding Standards 381 Ch

  • Page 383 and 384:

    Chapter 32: Coding Standards 383 Fu

  • Page 385 and 386:

    Chapter 32: Coding Standards 385 $s

  • Page 387 and 388:

    Chapter 32: Coding Standards 387 Fu

Zend Framework 1 + Doctrine 2
Seminario_MongoDB
1-Introduction
Database Modeling and Design
SQL SERVER 2008
Many-Dimensional Schema Modeling - ftp12.us.freebsd.org
JAXmag_v5-2
Book Sampler - Cdn.oreilly.com
Database Management Systems
Mise en page 1 - Eurocopter
PHP and MySQL for Dynamic Web Sites
The Zend PHP Certification Practice Test Book
Beginning PHP and MySQL 5. From Novice to Professional(2006)
About the Tutorial Audience Prerequisites Copyright & Disclaimer
Beginning PHP6, Apache, MySQL® Web Development
At f=1/2
SQL Server Team-based Development - Red Gate Software
dwh_tutorial
S-MC400-1-EN-0817
S-MC400-1-EN-07_18
EXTENDED LEARNING MODULE J - McGraw-Hill Learning Solutions
Data Modeling for Business Intelligence with ... - CA Technologies
Chapter2(pdf) - KFUPM Open Courseware
INVESTORS MAILING LIST (2)
asia-16-Rubin-The-Perl-Jam-2-The-Camel-Strikes-Back
1 2 3 - Westlaw
Open UKLSR Volume 1(2) - Uklsa
1j4zTQq
Data and Applications Security XVII - FTP Directory Listing
Defensive Database Programming - Red Gate Software