You are on page 1of 14

18/06/13

ADOdb Active Record

ADOdb Active Record


(C) 2000-2010 John Lim (jlim # natsoft.com)
Este software tiene licencia dual BSD-Style y LGPL. Esto significa que se puede utilizar en productos comerciales como en propietarios.

1. Introduccin
ADOdb_Active_Record es un Mapping aplicacin Objeto relacin (ORM) usando PHP. En un sistema ORM, las tablas y filas de la base de datos se resumieron en objetos de PHP nativas. Esto permite que el programador se centre ms en la manipulacin de los datos y menos en la escritura de consultas SQL. Esta aplicacin se diferencia de la implementacin de Zend marco de las siguientes maneras: Funciona con PHP4 y PHP5 y proporciona una funcionalidad equivalente en ambas versiones de PHP. ADOdb_Active_Record funciona cuando est conectado a varias bases de datos. Zend de slo funciona cuando se conecta a una base de datos por defecto. Apoyo a $ ADODB_ASSOC_CASE. Los nombres de los campos estn en mayscula, en minsculas o dejados en caso natural, dependiendo de este ajuste. Sin nombre de campo de la conversin a-caps camel estilo, a diferencia de la implementacin de Zend que convertir los nombres de campo como 'nombre' a 'firstName. NewADOConnection :: GetActiveRecords () y ADOConnection :: GetActiveRecordsClass () en adodb.inc.php. Almacenamiento en cach de metadatos de la tabla por lo que slo se consulta una vez a la mesa, no importa cuntos se crean registros activos. PHP5 versin de ADOdb_Active_Record ahora es compatible con uno a muchas relaciones. Nueva adodb-activa-recordx.inc.php, que es un registro activo prolongado aplicacin que soporte JOIN para un mayor rendimiento al cargar nios, y otras caractersticas agradables. Un montn de funcionalidades adicionales . ADOdb_Active_Record est diseado conforme a los principios del modelo de diseo "ActiveRecord", que fue descrito por primera vez por Martin Fowler. El patrn ActiveRecord se ha implementado en muchas formas a travs del espectro de lenguajes de programacin. ADOdb_Active_Record intenta representar la base de datos lo ms estrechamente a los objetos nativas de PHP como sea posible. ADOdb_Active_Record asigna una tabla de base de datos para una clase de PHP, y cada instancia de esa clase representa una fila de la tabla. Las relaciones entre tablas tambin pueden ser definidas, lo que permite a los objetos ADOdb_Active_Record pueden anidar.

2. Configuracin de la conexin de base de datos


El primer paso para utilizar ADOdb_Active_Record es establecer la conexin por defecto que un objeto ADOdb_Active_Record utilizarn para conectarse a una base de datos.
r e q u i r e _ o n c e( ' a d o d b/a d o d b a c t i v a r e c o r d . i n c . p h p ' ) ; $D b=N e w A D O C o n n e c t i o n( ' m y s q l: //r o o t :c o n t r a s e a@l o c a l h o s t/d b n a m e ' ) ; A D O d b _ A c t i v e _ R e c o r d: :S e t D a t a b a s e A d a p t e r( $d b ) ;

3. Filas de tabla como objetos


En primer lugar, vamos a crear una tabla temporal en la base de datos MySQL que podemos usar para fines demostrativos todo el resto de este tutorial. Podemos hacer esto mediante el envo de una consulta CREATE:
$D b >E x e c u t e( " C R E A T ET A B L E `p e r s o n a sT E M P O R A L` ( ` I d `i n t( 1 0 )N O TN U L LA U T O _ I N C R E M E N Ts i nf i r m a r , ` `V a r c h a rN a m e _ F i r s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rN a m e _ L a s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rf a v o r i t e _ c o l o r( 1 0 0 )N O TN U L LD E F A U L T ' ' , P R I M A R YK E Y( ` i d ` ) )E N G I N E=M y I S A M ; " ) ;

ADOdb_Active_Records son representaciones de objetos de filas de la tabla. Cada tabla de la base de datos est representada por una clase en PHP. Para comenzar a trabajar con una tabla como ADOdb_Active_Record, una clase que extiende ADOdb_Active_Record debe crearse para ello.
p e r s o n ad ec l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } $P e r s o n a=n e wp e r s o n a( ) ;

En el ejemplo anterior, un nuevo objeto ADOdb_Active_Record $ persona fue creado para acceder a la tabla "personas". Zend_Db_DataObject toma el nombre de la clase, pluralice que (de acuerdo a las reglas del ingls americano), y se supone que este es el nombre de la tabla en la base de datos. Tambin tenga en cuenta que con MySQL, los nombres de tabla distinguen entre maysculas y minsculas, por lo que el nombre de la clase debe
phplens.com/lens/adodb/docs-active-record.htm 1/14

18/06/13

ADOdb Active Record

coincidir con el caso del nombre de la tabla. Con otras bases de datos con las tablas entre maysculas y minsculas, la clase se puede capitalizar de manera diferente. Este tipo de comportamiento es tpico de ADOdb_Active_Record. Se asumir tanto como sea posible, por convencin, en lugar de configuracin explcita. En situaciones donde no es posible utilizar las convenciones que ADOdb_Active_Record espera, las opciones pueden ser anulados, como veremos ms adelante.

4. Columnas de la tabla como propiedades de los objetos


Cuando se crea una instancia del objeto persona $, ADOdb_Active_Record leer los metadatos de tabla de la base de datos, y luego se exponen las columnas (campos) de la tabla como propiedades del objeto. Nuestra mesa "personas" tiene tres campos: "Name_First", "Name_Last", y "favorite_color". Cada uno de estos campos es ahora una propiedad del objeto $ persona. Para ver todas estas propiedades, utilice el mtodo ADOdb_Active_Record :: getAttributeNames ():
v a r _ d u m p( $p e r s o n >g e t A t t r i b u t e N a m e s( ) ) ; /* * *S ee m i t el as i g u i e n t e : *A r r a y( 4 ){ *[ 0 ]= > *S t r i n g( 2 )" i d " *[ 1 ]= > *S t r i n g( 9 )" N a m e _ F i r s t " *[ 2 ]= > *S t r i n g( 8 )" N a m e _ L a s t " *[ 3 ]= > *S t r i n g( 1 3 )" f a v o r i t e _ c o l o r " * } */

Una gran diferencia entre la aplicacin ADOdb y de Zend es no nos convertimos automticamente en camelCaps estilo.

5. Insertar y actualizar un Registro


Un objeto ADOdb_Active_Record es una representacin de una sola fila de la tabla. Sin embargo, cuando se crea una instancia el objeto $ persona, no hace referencia a ninguna fila en particular. Es un disco en blanco que todava no existe en la base de datos. Un objeto ADOdb_Active_Record se considera en blanco cuando la clave principal es NULL. La clave principal de la mesa personas es "id". Para insertar un nuevo registro en la base de datos, cambie las propiedades del objeto y luego llamar a la ADOdb_Active_Record :: save () Mtodo:
$P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >N a m e _ F i r s t=' A n d i ' ; $P e r s o n >N a m e _ L a s t=' G u t m a n s ' ; $P e r s o n >s a v e( ) ;

Oh, no! El cdigo anterior no se inserta un nuevo registro en la base de datos. En su lugar, enva un error:
1 0 4 8 :L ac o l u m n a' f a v o r i t e _ c o l o r 'n op u e d es e rn u l o

Este error ya que MySQL rechaz la consulta INSERT que se gener por ADOdb_Active_Record. Si las excepciones estn habilitadas en ADOdb y est utilizando PHP5, se producir un error. En la definicin de nuestra tabla, especificamos todos los campos como NOT NULL, es decir, deben contener un valor. ADOdb_Active_Records estn sujetos a las mismas contraints como las tablas de la base que representan. Si el campo de la base de datos no puede ser NULL, la propiedad correspondiente en el ADOdb_Active_Record tambin no puede ser NULL. En el ejemplo anterior, pero no hemos podido establecer la propiedad $ person-> FavoriteColor, lo que provoc el INSERT para ser rechazado por MySQL. Para insertar un nuevo ADOdb_Active_Record en la base de datos, llenar todas las propiedades de ADOdb_Active_Record fin de cumplir con las restricciones de la tabla de base de datos y, a continuacin, llamar al mtodo save ():
/* * *L l a m a ra lm t o d os a v e( )i n s e r t a r x i t o *E s t o s$p e r s o n ae nl at a b l ad eb a s ed ed a t o s . */ $P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >N a m e _ F i r s t=' A n d i ' ; $P e r s o n >N a m e _ L a s t=' G u t m a n s ' ; $P e r s o n >f a v o r i t e _ c o l o r=' b l u e ' ; $P e r s o n >s a v e( ) ;

Una vez que esta persona $ se ha insertado en la base de datos llamando a save (), la clave principal se puede leer como una propiedad. Dado que esta es la primera fila insertada en nuestra tabla temporal, su "id" ser 1:
v a r _ d u m p( $p e r s o n >i d ) ; /* * *S ee m i t el as i g u i e n t e : *S t r i n g( 1 )

phplens.com/lens/adodb/docs-active-record.htm

2/14

18/06/13
*/

ADOdb Active Record

A partir de ahora, la actualizacin es simplemente una cuestin de cambiar las propiedades del objeto y llamar al mtodo save () de nuevo:
$P e r s o n >f a v o r i t e _ c o l o r=" r o j o " ; $P e r s o n >s a v e( ) ;

El fragmento de cdigo anterior cambia el color favorito de rojo, y luego actualizar el registro en la base de datos.

ADOdb funcionalidad especfica


6. Ajuste del nombre de la tabla
El comportamiento por defecto en la creacin de un ADOdb_Active_Record es "pluralizar", el nombre de clase y usar eso como el nombre de la tabla. A menudo, este no es el caso. Por ejemplo, la clase de persona podra ser la lectura de la tabla "Personas". Ofrecemos dos formas de definir su propia tabla: 1. Utilice un parmetro de constructor de modificar el comportamiento de nombres de tablas por omisin.
p e r s o n ad ec l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } $P e r s o n a=n e wp e r s o n a( " P e r s o n a s " ) ;

2. Definir en una declaracin de clase:


p e r s o n ad ec l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d { v a r$_ t a b l e=" P e r s o n a s " ; } $P e r s o n a=n e wp e r s o n a( ) ;

7. $ ADODB_ASSOC_CASE
Esto le permite controlar el caso de los nombres de los campos y propiedades. Por ejemplo, todos los nombres de campo de Oracle son maysculas por defecto. As que usted puede forzar a los nombres de campos que se utilizan minsculas $ ADODB_ASSOC_CASE. Los valores vlidos son los siguientes:
0 :m i n s c u l a s 1 :m a y s c u l a s 2 :n a t i v od el o sc a s o s

As que para obligar a todos los nombres de campo de Oracle a minsculas, utilice
$A D O D B _ A S S O C _ C A S E=0 ; $P e r s o n a=n e wp e r s o n a( " P e r s o n a s " ) ; $P e r s o n >n a m e=' L i l y ' ; $A D O D B _ A S S O C _ C A S E=2 ; $P e r s o n a 2=n e wp e r s o n a( " P e r s o n a s " ) ; $P e r s o n a 2 >N A M E=' L i l y ' ;

Ver tambin $ ADODB_ASSOC_CASE .

8. ADOdb_Active_Record :: Save ()
Guarda un registro mediante la ejecucin de una instruccin INSERT o UPDATE SQL segn corresponda. Devuelve false en INSERT fallido, si es cierto INSERT successsful. Devuelve 0 en error de actualizacin, y 1 en la actualizacin si los datos han cambiado, y -1 si se ha cambiado ningn dato, por lo que se ha ejecutado ninguna sentencia UPDATE.

9. ADOdb_Active_Record :: replace ()
ADOdb apoya reemplazar la funcionalidad, mediante el cual se inserta el registro si no existe, o actualiza lo contrario.
$R e c=n e wA D O d b _ A c t i v e _ R e c o r d( " p r o d u c t o " ) ; $R e c >n a m e=' J u a n ' ; $R e c >t e l _ n o=' 3 4 1 1 1 1 4 5' ; $O k=$r e c >r e p l a c e( )//0=e r r o r ,1=a c t u a l i z a r ,2=i n s e r t a r

10. ADOdb_Active_Record :: Load ($ where)


A veces, queremos cargar un nico registro en un registro activo. Podemos hacerlo a travs de:
phplens.com/lens/adodb/docs-active-record.htm 3/14

18/06/13
$P e r s o n >l o a d( " i d=3 " ) ; //Oe lu s od ep a r m e t r o sd ev i n c u l a c i n $P e r s o n >l o a d( " i d= " ,a r r a y( 3 ) ) ;

ADOdb Active Record

Devuelve false si se produce un error.

11. ADOdb_Active_Record :: Buscar ($ whereOrderBy, $ bindarr = false, $ pkeyArr = false)


Queremos recuperar un conjunto de registros activos a base de algunos criterios de bsqueda. Por ejemplo:
c l a s ed ep e r s o n ae x t e n d sA D O d b _ A c t i v e _ R e c o r d{ v a r$_ t a b l e=" p u e b l o " ; } $P e r s o n a=n e wp e r s o n a( ) ; $P e o p l e A r r a y=$p e r s o n >B u s c a r( " n o m b r ec o m oe lf i nd el ae d a d ? " ,A r r a y( ' S m % ' ) ) ;

12. Identificadores Citando


Puede forzar los nombres de columnas que se indican en las instrucciones INSERT y UPDATE, normalmente porque est utilizando las palabras reservadas como nombres de columna mediante el establecimiento de
A D O D B _ A c t i v e _ R e c o r d: :$_ q u o t e N a m e s=t r u e ;

El valor predeterminado es false.

13. Manejo de errores y depuracin


En PHP5, si se incluye adodb-exceptions.inc.php, entonces se lanzan errores. De lo contrario los errores se manejan mediante la devolucin de un valor. False por defecto significa se ha producido un error. Puede obtener el ltimo mensaje de error con la funcin ErrorMsg (). Para comprobar si hay errores en ADOdb_Active_Record, no sondear ErrorMsg (), ya que siempre se devolver el ltimo mensaje de error, incluso si ocurri hace varias operaciones. Haga esto en su lugar:
#D e r e c h o ! $O k=$r e c >G u a r d a r( ) ; ( !$o k )s i$e r r=$r e c >E r r o r M s g( ) ; #E q u i v o c a d a :( $R e c >G u a r d a r( ) ; i f( $r e c >E r r o r M s g( ) )e c h o" E lc a m i n oe q u i v o c a d op a r ad e t e c t a re le r r o r " ;

El ADOConnection :: propiedad Debug es obedecida. As que si $ db-> debug est habilitado, entonces los errores ADOdb_Active_Record tambin se da salida a la salida estndar y se escriben en el explorador.

14. ADOdb_Active_Record :: set ()


Puede convertir una matriz para una ADOdb_Active_Record con set (). La matriz debe ser indexado numricamente, y tienen todos los campos de la tabla definida en el array. Los elementos de la matriz deben estar en el orden natural de la tabla tambin.
$R o w=$d b >G e t R o w( " S E L E C T*F R O Mt a b l e xd o n d ei d=$i d " ) ; #P H P 4oP H P 5s i np e r m i t i re x c e p c i o n e s $O b j=n e wA D O d b _ A c t i v e _ R e c o r d( " P r o d u c t o s " ) ; i f( $o b j >E r r o r M s g( ) ){ e c h o$o b j >E r r o r M s g( ) ; }E l s e{ $O b j >s e t( $r o w ) ; } #E nP H P 5 ,c o ne x c e p c i o n e sh a b i l i t a d a s : i n c l u d e( ' a d o d b e x c e p t i o n s . i n c . p h p ' ) ; t r y{ $O b j=n e wA D O d b _ A c t i v e _ R e c o r d( " P r o d u c t o s " ) ; $O b j >s e t( $r o w ) ; }C a t c h( e x c e p c i o n e s$e ){ e c h o$e >g e t M e s s a g e( ) ; }

15. Claves Primarias


ADOdb_Active_Record no requiere la tabla tenga una clave principal. Puede insertar registros de una tabla, pero usted no ser capaz de actualizar ni eliminar. A veces se recuperan datos de una vista o tabla que no tiene clave primaria, pero tiene un ndice nico. Puede ajustar dinmicamente la clave principal de una tabla a travs del constructor:
phplens.com/lens/adodb/docs-active-record.htm 4/14

18/06/13
$P k e y s=a r r a y( ' c a t e g o r y ' ,' p r o d c o d e ' ) ;

ADOdb Active Record

//E s t a b l e c e rl ac l a v ep r i n c i p a lu t i l i z a n d oe lc o n s t r u c t o r $R e c=n e wA D O d b _ A c t i v e _ R e c o r d( ' P r o d u c t o s ' ,$p k e y s ) ; //Od e f i n i ru n an u e v ac l a s e c l a s ed ep r o d u c t o ss ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ f u n c t i o n_ _c o n s t r u c t( ) { p a r e n t: :_ _ c o n s t r u c t( ' P r o d u c t o s ' ,a r r a y( ' P r o d I D ' ) ) ; } } $R e c=n e wP r o d u c t o( ) ;

16. La recuperacin de incremento automtico ID


Al crear un nuevo registro, la recuperacin de la ltima de incremento automtico de identificacin no es confiable para las bases de datos que no soportan el Insert_ID () llamada a la funcin (marque $ connection-> hasInsertID). En este caso se realiza un SELECT MAX ($ primarykey) DESDE $ table , que no va a funcionar con fiabilidad en un entorno multi-usuario. Puede anular la funcin ADOdb_Active_Record :: lastInsertId () en este caso.

17. Tratar con varias bases de datos


A veces queremos cargar datos desde una base de datos e insertarlo en otra utilizando ActiveRecords. Esto se puede hacer usando el parmetro opcional del constructor ADOdb_Active_Record. En el siguiente ejemplo, leemos datos de db.table1 y la almacenamos en db2.table2:
$D b=N e w A D O C o n n e c t i o n( . . . ) ; $D b 2=N e w A D O C o n n e c t i o n( . . . ) ; A D O d b _ A c t i v e _ R e c o r d: :S e t D a t a b a s e A d a p t e r( $d b 2 ) ; $A c t i v e R e c s=$d b >G e t A c t i v e R e c o r d s( ' t a b l a 1 ' ) ; f o r e a c h( $a c t i v e R e c sc o m o$r e c ){ $R e c 2=n e wA D O d b _ A c t i v e _ R e c o r d( ' t a b l a 2 ' ,$d b 2 ) ; $R e c 2 >i d=$r e c >i d ; $R e c 2 >n a m e=$r e c >n o m b r e ; $R e c 2 >G u a r d a r( ) ; }

Si usted tiene que pasar en una clave principal llamado "id" y la segunda conexin db en el constructor, puede hacer lo mismo:
$R e c=n e wA D O d b _ A c t i v e _ R e c o r d( " T a b l a 1 " ,a r r a y( " i d " ) ,$d b 2 ) ;

Ahora puede dar una etiqueta denominada en SetDatabaseAdapter, lo que permite determinar en la definicin de clase que la base de datos para cargar, usando var $ _dbat.
$D b 1=N e w A D O C o n n e c t i o n( . . . )//a l g u n o sA D O d bD B A D O d b _ A c t i v e _ R e c o r d: :S e t D a t a b a s e A d a p t e r( $d b 1 ,' m y s q l ' ) ; $D b 2=N e w A D O C o n n e c t i o n( . . . )//a l g u n o sA D O d bD B A D O d b _ A c t i v e _ R e c o r d: :S e t D a t a b a s e A d a p t e r( $d b 2 ,' o r a c l e ' ) ; c l a s eF o o R e c o r de x t i e n d eA D O d b _ A c t i v e _ R e c o r d { v a r$_ d b a t=' m y s q l ' ; //U t i l i z al ac o n e x i n' m y s q l ' . . . }

18. $ ADODB_ACTIVE_CACHESECS
Puede almacenar en cach los metadatos de tabla (nombres de campo, tipos y otros detalles tales claves primarias) en $ ADODB_CACHE_DIR (por defecto / tmp) estableciendo la variable global $ ADODB_ACTIVE_CACHESECS a un valor mayor que 0. Este ser el nmero de segundos de memoria cach. Usted debe establecer en un valor de 30 segundos o ms para un rendimiento ptimo.

19. Active Record considera malo?


Aunque el concepto de registro Active es til, hay que tener en cuenta algunos errores cuando se utiliza Active Record. El nivel de granularidad de Active Record es registros individuales. Alienta cdigo como el siguiente, que se utiliza para aumentar el precio de todos los productos de los muebles en un 10%:
$R e c s=$d b >G e t A c t i v e R e c o r d s( " P r o d u c t o s " ," c a t e g o r y=' m u e b l e s ' " ) ; f o r e a c h( $r e c sc o m o$r e c ){ $R e c >P r e c i o*=1 , 1 ;//i n c r e m e n t od el o sp r e c i o se nu n1 0 %p a r at o d o sl o sp r o d u c t o sd em u e b l e s $R e c >s a v e( ) ; }

Por supuesto, una instruccin UPDATE es superior porque es ms simple y mucho ms eficiente (probablemente por un factor de x10 o ms):
$D b >E x e c u t e( " a c t u a l i z a c i nP r o d u c t sp r i c es e t=p r e c i o*1 . 1d o n d ec a t e g o r y=' M o b i l i a r i o ' " ) ;

phplens.com/lens/adodb/docs-active-record.htm

5/14

18/06/13

ADOdb Active Record

Para el cdigo sensibles rendimiento, utilizando SQL directa siempre ser ms rpido que el uso de registros activos debido a los gastos generales y el hecho de que todos los campos en una fila se recuperan (y no slo el subconjunto que necesita) siempre que se carga un registro activo.

20. Transacciones
El modo de operacin predeterminado en ADOdb es confirmacin automtica. As que es el valor predeterminado de registro activo tambin. An se aplican las normas generales de gestin de transacciones. Active Record para la base de datos es un conjunto de insert / update / delete y el PP no tiene conocimiento de los registros activos. Transacciones inteligentes, que realiza un proceso de reversin si se produce un error, sigue siendo el mejor mtodo para mltiples actividades (inserciones / actualizaciones / eliminaciones) que deben ser tratados como una nica transaccin:
$C o n n >S t a r t T r a n s( ) ; $M a t r i z >s a v e( ) ; $I n f a n t i l >s a v e( ) ; $C o n n >C o m p l e t e T r a n s( ) ;

Uno a Muchos Relaciones


Desde ADOdb 5.06, apoyamos las relaciones padre-hijo. Esto se hace usando las funciones de ClassHasMany () ClassBelongsTo () y.

21. ClassHasMany
Para definir globalmente un uno-a-muchos se utiliza la funcin esttica ADODB_Active_Record :: ClassHasMany ($ class, $ respecto, $ foreignKey ='', $ foreignClass = 'ADODB_Active_Record'). Por ejemplo, tenemos 2 mesas, personas (tabla principal) y los nios (tabla secundaria) unidos por persons.id = children.person_id . La variable $ person-> nios es una matriz que contiene los nios. Para definir esta relacin:
p e r s o n ad ec l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } A D O D B _ A c t i v e _ R e c o r d: :C l a s s H a s M a n y( " p e r s o n a " ," n i o s " ," p e r s o n _ i d' ) ; $P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >L o a d( " i d=1 " ) ; f o r e a c h( $p e r s o n >n i o sc o m o$c ){ e c h o" $c >N a m e _ F i r s t " ; $C >N a m e _ F i r s t=' K ' . ; $C >G u a r d a r( )##c a d ar e g i s t r oh i j od e b eg u a r d a r s ed ef o r m ai n d i v i d u a l }

Si no se ha cargado los datos, entonces los nios se establece en una matriz vaca:
$P e r s o n a 2=n e wp e r s o n a( ) ; $P=$P e r s o n 2 >n i o s ;##$pe su n am a t r i zv a c a( )

De forma predeterminada, los datos devueltos por hasMany () est clasificado. Para definir una clusula order by (o definir una ventana LMITE SELECT), ver LoadRelations () a continuacin. Otro punto es que todos los nios se cargan slo cuando se accede al miembro secundario (en __ get), y no cuando se llama Load () funcin del objeto principal. Esto ayuda a conservar la memoria. Para crear y guardar nuevos registros primarios y secundarios:

p e r s o n ad ec l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } n i o sd el ac l a s es ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } A D O D B _ A c t i v e _ R e c o r d: :C l a s s H a s M a n y( " p e r s o n a " ," n i o s " ," p e r s o n _ i d' ) ; $P e r s o n a=n e wp e r s o n a( ) ; f o r( $i=0 ;$i< 1 0 ;$i++ ) $P e r s o n >l o sn i o s[ 0 ]=n e wn i o s( " n i o s " ) ; //M o d i f i c a rl o sc a m p o sd e$p e r s o n a ,e n t o n c e s. . . $P e r s o n >s a v e( ) ; f o r e a c h( $p e r s o n >n i o sc o m o$c ){ //M o d i f i c a rl o sc a m p o sd e$ce n t o n c e s. . . $C >s a v e( ) ; }

Puede tener varias relaciones (advertencia: las relaciones entre maysculas y minsculas, 'Children' == 'nios'!):
A D O D B _ A c t i v e _ R e c o r d: :C l a s s H a s M a n y( " p e r s o n a " ," n i o s " ," p e r s o n _ i d' ) ; A D O D B _ A c t i v e _ R e c o r d: :C l a s s H a s M a n y( " p e r s o n a " ," h e r m a n o s " ," p e r s o n _ i d' ) ; $P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >L o a d( ' i d=1 ' ) ; v a r _ d u m p( $p e r s o n >n i o s ) ; v a r _ d u m p( $p e r s o n >h e r m a n o s ) ;

De forma predeterminada, la clase de nio es ADOdb_Active_Record. A veces es posible que desee a la clase infantil que se basa en su propia clase que tiene funciones adicionales. Puede hacerlo utilizando el ltimo parmetro:
p e r s o n ad ec l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ }

phplens.com/lens/adodb/docs-active-record.htm

6/14

18/06/13

ADOdb Active Record


n i oc l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ . . . .a l g u n a sm o d i f i c a c i o n e sa q u . . .} A D O D B _ A c t i v e _ R e c o r d: :C l a s s H a s M a n y( " p e r s o n a " ," n i o s " ," p e r s o n _ i d' , 'n i o' ) ;

Por ltimo algunos problemas de resolucin de problemas. Usamos el __ get () para asignar $ p-> nios a continuacin. As que una vez $ p-> nios se define por el acceso a ella, no cambiamos la referencia nio, como se muestra a continuacin:
A D O D B _ A c t i v e _ R e c o r d: :C l a s s H a s M a n y( " p e r s o n a " ," n i o s " ," p e r s o n _ i d' ) ; $P=n e wp e r s o n a( ) ; $P >L o a d( ' i d=1 ' ) ; #$P >i n f a n t i ld e m u e s t r ap e r s o n _ i d=1 v a r _ d u m p( $p >n i o s ) ; $P >L o a d( ' i d=2 ' ) ; #$P >n i o sa na p u n t aap e r s o n _ i d=1 v a r _ d u m p( $p >n i o s ) ;

La solucin a lo anterior es unset ($ p-> children) antes $ p-> Load ('id = 2').

22. TableHasMany
En algunas clases, la asignacin entre nombre de la clase y el nombre de la tabla (que es la versin pluralizado) no podra igualar. Por ejemplo, el nombre de la clase puede ser persona , pero el nombre de la tabla puede ser la gente . As que tenemos 2 mesas, las personas (tabla principal) y los nios (tabla secundaria) unidos por people.id = children.person_id . A continuacin, se utiliza la siguiente funcin esttica ADODB_Active_Record :: TableHasMany ($ tabla, $ respecto, $ foreignKey ='', $ foreignClass = 'ADODB_Active_Record') de esta manera:
A D O D B _ A c t i v e _ R e c o r d: :T a b l e H a s M a n y( " p u e b l o " ," n i o s " ," p e r s o n _ i d' )

23. TableKeyHasMany
En algunas clases, la asignacin entre nombre de la clase y el nombre de la tabla (que es la versin pluralizado) no puede coincidir o la clave principal no es el valor predeterminado de id . Por ejemplo, el nombre de la clase puede ser persona , pero el nombre de la tabla puede ser la gente . As que tenemos 2 mesas, las personas (tabla principal) y los nios (tabla secundaria) unidos por people.pid = children.person_id . A continuacin, se utiliza la siguiente funcin esttica ADODB_Active_Record :: TableKeyHasMany ($ tabla, $ tablePKey, relacin $, $ foreignKey ='', $ foreignClass = 'ADODB_Active_Record') de esta manera:
A D O D B _ A c t i v e _ R e c o r d: :T a b l e K e y H a s M a n y( " p u e b l o " ," p i d " ," n i o s " ," p e r s o n _ i d' )

24. Un ejemplo completo ClassHasMany


He aqu ejemplos de uso utilizando mysql:
i n c l u d e _ o n c e( ' /a d o d b . i n c . p h p . . ' ) ; i n c l u d e _ o n c e( ' /a d o d b a c t i v a r e c o r d . i n c . p h p . . ' ) ; $D b=N e w A D O C o n n e c t i o n( ' m y s q l: //r o o t@l o c a l h o s t/n o r t e s ' ) ; A D O d b _ A c t i v e _ R e c o r d: :S e t D a t a b a s e A d a p t e r( $d b ) ; $D b >E x e c u t e( " C R E A T ET A B L E `p e r s o n a sT E M P O R A L` ( ` I d `i n t( 1 0 )N O TN U L LA U T O _ I N C R E M E N Ts i nf i r m a r , ` `V a r c h a rN a m e _ F i r s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rN a m e _ L a s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rf a v o r i t e _ c o l o r( 1 0 0 )N O TN U L LD E F A U L T ' ' , P R I M A R YK E Y( ` i d ` ) )E N G I N E=M y I S A M ; " ) ; $D b >E x e c u t e( " C R E A T ET E M P O R A R YT A B L E `h i j o s' ( ` I d `i n t( 1 0 )N O TN U L LA U T O _ I N C R E M E N Ts i nf i r m a r , ` P e r s o n _ i d `i n t( 1 0 )N O TN U L Ls i nf i r m a r , ` G n e r o `v a r c h a r( 1 0 )d e f a u l t' F ' , ` `V a r c h a rN a m e _ F i r s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rN a m e _ L a s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rf a v o r i t e _ p e t( 1 0 0 )N O TN U L LD E F A U L T ' ' , P R I M A R YK E Y( ` i d ` ) )E N G I N E=M y I S A M ; " ) ; $D b >E x e c u t e( " i n s e r ti n t on i o s( p e r s o n _ i d ,N a m e _ F i r s t ,N a m e _ L a s t )v a l u e s ( 1 ,' J i l l ' ,' L i m ' ) " ) ; $D b >E x e c u t e( " i n s e r ti n t on i o s( p e r s o n _ i d ,N a m e _ F i r s t ,N a m e _ L a s t )v a l u e s ( 1 ,' J u a n a ' ,' L i m ' ) " ) ; $D b >E x e c u t e( " i n s e r ti n t on i o s( p e r s o n _ i d ,N a m e _ F i r s t ,N a m e _ L a s t )v a l u e s ( 1 ,' J a m i e ' ,' L i m ' ) " ) ; p e r s o n ad ec l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } A D O D B _ A c t i v e _ R e c o r d: :C l a s s H a s M a n y( " p e r s o n a " ," n i o s " ," p e r s o n _ i d' ) ; $P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >N a m e _ F i r s t=' J u a n ' ; $P e r s o n >N a m e _ L a s t=' L i m ' ; $P e r s o n >f a v o r i t e _ c o l o r=' L a v a n d a ' ; $P e r s o n >s a v e( ) ;//E s t oa h o r r ar e a l i z a r u nI N S E R Tc o n x i t o

phplens.com/lens/adodb/docs-active-record.htm

7/14

18/06/13

ADOdb Active Record


$P e r s o n a 2=n e wp e r s o n a( )#n oh a yn e c e s i d a dd ed e f i n i rh a s M a n y( )d en u e v o ,a d o d br e c u e r d ad e f i n i c i n $P e r s o n a 2 >L o a d( ' i d=1 ' ) ; $C=$p e r s o n a 2 >n i o s ; i f( i s _ a r r a y& &( $c )s i z e o f( $c )= =3& &$c[ 0 ]>N a m e _ F i r s t= =' J i l l '& &$c[ 1 ]>N a m e _ F i r s t= =' J o a n ' & &$C[ 2 ]>N a m e _ F i r s t= =' J a m i e ' )e c h o" O KC a r g a d oh a s M a n y< b r > " ; e l s e{ e c h o" E r r o rl o a d i n gh a s M a n yd e b et e n e r3M a t r i zd ee l e m e n t o sJ i l lJ o a nJ a m i e< b r > " ; }

25. HasMany
El mtodo ms antiguo es obsoleto y ClassHasMany / TableHasMany / TableKeyHasMany debe ser utilizado. La forma ms para definir un uno-a-muchos es usar $ parentobj-> hasMany ($ respecto, $ foreignKey =''). Por ejemplo, tenemos 2 mesas, personas (tabla principal) y los nios (tabla secundaria) unidos por persons.id = children.person_id . La variable $ person-> nios es una matriz que contiene los nios. Para definir esta relacin:
p e r s o n ad ec l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } $P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >h a s M a n y( " n i o s " ," p e r s o n _ i d' ) ; $P e r s o n >L o a d( " i d=1 " ) ; f o r e a c h( $p e r s o n >n i o sc o m o$c ){ e c h o" $c >N a m e _ F i r s t " ; $C >N a m e _ F i r s t=' K ' . ; $C >G u a r d a r( )##c a d ar e g i s t r oh i j od e b eg u a r d a r s ed ef o r m ai n d i v i d u a l }

Este hasMany () definicin es global para el script actual. Esto significa que usted slo tendr que definir una vez. En el siguiente ejemplo, $ persona2 sabe acerca de los nios .
$P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >h a s M a n y( " n i o s " ," p e r s o n _ i d' ) ; $P e r s o n a 2=n e wp e r s o n a( ) ; $P e r s o n >L o a d( " i d=1 " ) ; $P=$p e r s o n a 2 >n i o s ;

26. ClassBelongsTo
Puede definir el padre del objeto actual mediante ADODB_Active_Record :: ClassBelongsTo ($ class, $ RelationName, $ foreignKey, $ parentPrimaryKey = 'id', $ ParentClass = 'ADODB_Active_Record'). En el siguiente ejemplo, tenemos un nio de mesa nios , y una tabla padre persona . Tenemos un vnculo kids.person_id = persons.id . Creamos un nio primero y luego vincularlo a los padres:
k i dc l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } ; A D O D B _ A c t i v e _ R e c o r d: :C l a s s B e l o n g s T o( ' n i o ' ,' p e r s o n a ' ,' p e r s o n _ i d ' ,' i d ' ) ; $C h=n e wk i d( ) ;n o m b r ed et a b l a//p o rd e f e c t os e r ' n i o s ' ,c o ne l' i d 'c l a v ep r i m a r i a $C h >L o a d( ' i d=1 ' ) ; $P=$c h >p e r s o n a ; s i|e c h o" E r r o rl o a d i n gb e l o n g s T o< b r > "( $p|$p >N a m e _ F i r s t=' J u a n ' ! ) ; e l s ee c h o" c a r g aA c e p t a rB e l o n g T o< b r > " ;

Tenga en cuenta que las relaciones entre maysculas y minsculas, por lo ClassBelongsTo ('nio', 'PADRE', 'parent_id') y ClassBelongsTo ('nio', 'padre', 'parent_id') no son los mismos. Adems, si los datos no se carga en la instancia secundaria, entonces $ p devolver null;
A D O D B _ A c t i v e _ R e c o r d: :C l a s s B e l o n g s T o( ' n i o ' ,' p e r s o n a ' ,' p e r s o n _ i d ' ,' i d ' ) ; $C h=n e wk i d( ) ; $P=$c h >p e r s o n a ;#$pe sn u l o

Otra manera de definir la clase de los padres (que de otro modo por defecto a ADODB_Active_Record) como sigue:

k i dc l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } ; p e r s o n ad ec l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ . . .s u sm o d i f i c a c i o n e s. . .} ; A D O D B _ A c t i v e _ R e c o r d: :C l a s s B e l o n g s T o( ' n i o ' ,' p e r s o n a ' ,' p e r s o n _ i d ' ,' i d ' ,' p e r s o n a ' ) ;

27. TableBelongsTo
Si la tabla secundaria se diferencia de la convencin de que el nombre de tabla secundaria es el plural del nombre de la clase infantil, utilice esta funcin: ADODB_Active_Record :: TableBelongsTo ($ ChildTable, $ RelationName, $ foreignKey, $ parentPrimaryKey = 'id', $ ParentClass = 'ADODB_Active_Record'). Ej. la clase es menor , pero el nombre de la tabla es de los nios , y la relacin entre las dos tablas es children.person_id = person.id:
A D O D B _ A c t i v e _ R e c o r d: :T a b l e B e l o n g s T o( " n i o s " ," p e r s o n a " ," p e r s o n _ i d' , 'i d' ) ;

phplens.com/lens/adodb/docs-active-record.htm

8/14

18/06/13

ADOdb Active Record

28. TableKeyBelongsTo
Si la tabla secundaria se diferencia de la convencin de que el nombre de tabla secundaria es el plural del nombre de la clase infantil o la clave principal no es 'id', utilice esta funcin: ADODB_Active_Record :: TableKeyBelongsTo ($ ChildTable, $ childKey, $ RelationName, $ foreignKey, $ parentPrimaryKey = 'id', $ ParentClass = 'ADODB_Active_Record'). Ej. la clase es menor , pero el nombre de la tabla es de los nios y clave principal se ch_id , y la relacin entre las dos tablas es children.person_id = person.id:
A D O D B _ A c t i v e _ R e c o r d: :T a b l e K e y B e l o n g s T o( ' n i o s ' ,' c h _ i d ' ,' p e r s o n a ' ,' p e r s o n _ i d ' ,' i d ' ) ;

29. Pertenece
La siguiente es obsoleto. Utilice ClassBelongsTo / TableBelongsTo / TableKeyBelongsTo lugar. La forma ms para definir el padre del objeto actual utiliza Pertenece ($ RelationName, $ foreignKey, $ parentPrimaryKey = 'id'). En el siguiente ejemplo, tenemos un nio de mesa los nios , y una tabla padre persona . Tenemos un vnculo children.person_id = persons.id . Creamos un nio primero y luego vincularlo a los padres:
c l a s eC h i l de x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } ; $C h=n e wC h i l d( ' n i o s ' ,a r r a y( ' i d ' ) ) ; $C h >P e r t e n e c e( ' p e r s o n ' ,' p e r s o n _ i d ' ,' i d ' ) ;##e s t os ep u e d es i m p l i f i c a ra$c h >P e r t e n e c e( " p e r s o n a " ) ##C o m ov a l o r e sp o rd e f e c t od ec l a v ee x t e r n aa$t a b l a .' _ i d 'Y ##P a d r e sP K e yd e f e c t o' i d ' $C h >L o a d( ' i d=1 ' ) ; $P=$c h >p e r s o n a ; s i|e c h o" E r r o rl o a d i n gb e l o n g s T o< b r > "( $p|$p >N a m e _ F i r s t=' J u a n ' ! ) ; e l s ee c h o" c a r g aA c e p t a rB e l o n g T o< b r > " ;

Slo tiene que definir Pertenece () una vez en un guin, ya que es global para todos los casos.

30. LoadRelations
A veces se quiere cargar slo un subconjunto de los datos en una relacin. Por ejemplo, puede cargar todas las nias segn children.name LoadRelations utilizando ($ respecto, $ whereOrderBy ='', $ offset = -1, $ limit = -1):
#S u p o n e rq u ee s t oh as i d ol l a m a d o : #A D O D B _ A c t i v e _ R e c o r d: :C l a s s H a s M a n y( " p e r s o n a " ," n i o s " ," p e r s o n _ i d' ) ; $P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >L o a d( ' i d=2 3 ' ) ; #C a r g an oc a r g ah i j o sh a s t a$p e r s o n >n i o ss ea c c e d eoL o a d R e l a t i o n ss el l a m a : $P e r s o n >L o a d R e l a t i o n s( " n i o s " ," =o r d e n' F 'p o re ln o m b r ed eg n e r o " ) ;

Por ltimo, si usted tiene un montn de datos secundarios, se puede definir una ventana de los datos de los registros de cargar. En el siguiente ejemplo, cargaremos una ventana de 100 registros a la vez:

#S u p o n e rq u ee s t oh as i d ol l a m a d o : #A D O D B _ A c t i v e _ R e c o r d: :C l a s s H a s M a n y( " C u e n t a " ," o p e r a c i o n e s " ," a c c o u n t _ i d' ) ; $A c c=n e wC u e n t a( ) ; $A c c >L o a d( ' i d=2 3 ' ) ; $S t a r t=0 ; w h i l e( t r u e ){ $A c c >L o a d R e l a t i o n s( o p e r a c i o n e s , t x _ d o n e=0o r d e n a rp o rt r x d a t e " ,$i n i c i o ,$s t a r t+ 1 0 0 ) ; s is er o m p e( $a c c >t r a n s a c c i o n e s ! ) ; f o r e a c h( $A c c >t r a n s a c c i o n e sc o m o$k= >$t r x ){ ##P r o c e s a r $T r x >t x _ d o n e=1 ; $T r x >s a v e( ) ; } $I n i c i o+=1 0 0 ; u n s e t( $A c c >t r a n s a c c i o n e s ) ;

El $ desplazamiento est basado en 0, y $ limit es el nmero de registros que se recuperan. El valor por defecto es ignorar $ desplazamiento (-1) y $ limit (-1).

31. Agradecimientos
Gracias a Chris Ravenscroft para el cdigo original de uno-a-muchos (chris # voilaweb.com).

Suplemento ADOConnection
32. ADOConnection :: GetActiveRecords ()
Esto le permite recuperar un conjunto de ADOdb_Active_Records. Devuelve false si se produce un error.
phplens.com/lens/adodb/docs-active-record.htm 9/14

18/06/13

ADOdb Active Record


$T a b l a=" p r o d u c t o s " ; $W h e r e O r d e r B y=" n o m b r eL I K E' A % 'O R D E RB Yn o m b r e " ; $A c t i v e R e c A r r=$d b >G e t A c t i v e R e c o r d s( $t a b l a ,$w h e r e O r d e r B y ) ; f o r e a c h( $a c t i v e R e c A r rc o m o$r e c ){ $R e c >i d=r a n d( ) ; $R e c >s a v e( ) ; }

Y para recuperar todos los registros ordenados por campos especficos:


$W h e r e O r d e r B y=" 1=1O R D E RB Yn o m b r e " ; $A c t i v e R e c A r r=$d b >G e t A c t i v e R e c o r d s( $t a b l a ) ;

Para utilizar variables bind (suponiendo que es el lugar a los titulares para su base de datos?):
$A c t i v e R e c A r r=$d b >G e t A c t i v e R e c o r d s( $t a b l e N a m e ,n o m b r eL I K E ?' , a r r a y( ' A % ' ) ) ;

Tambin puede definir las claves principales de la tabla pasando un array de nombres de campos:
$A c t i v e R e c A r r=$d b >G e t A c t i v e R e c o r d s( $t a b l e N a m e ,n o m b r eL I K E ?' , a r r a y( ' A % ' ) ,a r r a y( ' i d ' ) ) ;

33. ADOConnection :: GetActiveRecordsClass ()


Esto le permite recuperar una matriz de objetos derivados de ADOdb_Active_Records. Devuelve false si se produce un error.
c l a s ed ep r o d u c t o ss ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ } ; $T a b l a=" p r o d u c t o s " ; $W h e r e O r d e r B y=" n o m b r eL I K E' A % 'O R D E RB Yn o m b r e " ; $A c t i v e R e c A r r=$d b >G e t A c t i v e R e c o r d s C l a s s( ' p r o d u c t o ' ,$t a b l a ,$w h e r e O r d e r B y ) ; #L o so b j e t o se n$a c t i v e R e c A r rs o nd el ac l a s e' p r o d u c t o ' f o r e a c h( $a c t i v e R e c A r rc o m o$r e c ){ $R e c >i d=r a n d( ) ; $R e c >s a v e( ) ; }

Para utilizar variables bind (suponiendo que es el lugar a los titulares para su base de datos?):
$A c t i v e R e c A r r=$d b >G e t A c t i v e R e c o r d s C l a s s( $c l a s s N a m e ,$t a b l e N a m e ,n o m b r eL I K E ?' , a r r a y( ' A % ' ) ) ;

Tambin puede definir las claves principales de la tabla pasando un array de nombres de campos:
$A c t i v e R e c A r r=$d b >G e t A c t i v e R e c o r d s C l a s s( $c l a s s N a m e ,$t a b l e N a m e ,n o m b r eL I K E ?' , a r r a y( ' A % ' ) ,a r r a y( ' i d ' ) ) ;

ADOConnection :: ErrorMsg ()
Devoluciones ltimo mensaje de error.

ADOConnection :: ErrorNo ()
Devoluciones ltimo nmero de error.

Ejemplo de cdigo ActiveRecord


Las siguientes obras con PHP4 y PHP5
i n c l u d e( ' /a d o d b . i n c . p h p . . ' ) ; i n c l u d e( ' /a d o d b a c t i v a r e c o r d . i n c . p h p . . ' ) ; //D e s c o m e n t a rl as i g u i e n t es id e s e ap r o b a rl a se x c e p c i o n e s #I f( P H P _ V E R S I O N >=5 )i n c l u d e( ' /a d o d b e x c e p t i o n s . i n c . p h p . . ' ) ; $D b=N e w A D O C o n n e c t i o n( ' m y s q l: //r o o t@l o c a l h o s t/n o r t e s ' ) ; $D b >d e b u g=1 ; A D O d b _ A c t i v e _ R e c o r d: :S e t D a t a b a s e A d a p t e r( $d b ) ; $D b >E x e c u t e( " C R E A T ET A B L E `p e r s o n a sT E M P O R A L` ( ` I d `i n t( 1 0 )N O TN U L LA U T O _ I N C R E M E N Ts i nf i r m a r , ` `V a r c h a rN a m e _ F i r s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rN a m e _ L a s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rf a v o r i t e _ c o l o r( 1 0 0 )N O TN U L LD E F A U L T ' ' , P R I M A R YK E Y( ` i d ` ) )E N G I N E=M y I S A M ; " ) ; p e r s o n ad ec l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d{ }

phplens.com/lens/adodb/docs-active-record.htm

10/14

18/06/13
$P e r s o n a=n e wp e r s o n a( ) ; e c h o" < p >s a l i d ad eg e t A t t r i b u t e N a m e s : " ; v a r _ d u m p( $p e r s o n >g e t A t t r i b u t e N a m e s( ) ) ; /* * *S ee m i t el as i g u i e n t e : *A r r a y( 4 ){ *[ 0 ]= > *S t r i n g( 2 )" i d " *[ 1 ]= > *S t r i n g( 9 )" N a m e _ F i r s t " *[ 2 ]= > *S t r i n g( 8 )" N a m e _ L a s t " *[ 3 ]= > *S t r i n g( 1 3 )" f a v o r i t e _ c o l o r " * } */

ADOdb Active Record

$P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >N a m e _ F i r s t=' A n d i ' ; $P e r s o n >N a m e _ L a s t=' G u t m a n s ' ; $P e r s o n >s a v e( ) ;//e s t os a v e( )f a l l a r e nI N S E R Tc o m of a v o r i t e _ c o l o re si m p r e s c i n d i b l er e l l e n a r. . .

$P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >N a m e _ F i r s t=' A n d i ' ; $P e r s o n >N a m e _ L a s t=' G u t m a n s ' ; $P e r s o n >f a v o r i t e _ c o l o r=' b l u e ' ; $P e r s o n >s a v e( ) ;//E s t oa h o r r ar e a l i z a r u nI N S E R Tc o n x i t o e c h o" < p >I DI n s e r tg e n e r a d o : " ;p r i n t _ r( $p e r s o n >i d ) ; $P e r s o n >f a v o r i t e _ c o l o r=" r o j o " ; $P e r s o n >s a v e( ) ;//e s t os a v e( )s er e a l i z au n aa c t u a l i z a c i n $P e r s o n a=n e wp e r s o n a( ) ; $P e r s o n >N a m e _ F i r s t=' J u a n ' ; $P e r s o n >N a m e _ L a s t=' L i m ' ; $P e r s o n >f a v o r i t e _ c o l o r=' L a v a n d a ' ; $P e r s o n >s a v e( ) ;//E s t oa h o r r ar e a l i z a r u nI N S E R Tc o n x i t o /G r a b a c i n/c a r g ad o n d ei d=2e nu n an u e v aA D O d b _ A c t i v e _ R e c o r d $P e r s o n a 2=n e wp e r s o n a( ) ; $P e r s o n a 2 >L o a d( ' i d=2 ' ) ; v a r _ d u m p( $p e r s o n a 2 ) ; //R e c u p e r a ru nc o n j u n t od er e g i s t r o s $A c t i v e A r r=$d b >G e t A c t i v e R e c o r d s C l a s s( $c l a s s=" p e r s o n a " ,$t a b l a=" p e r s o n a s " ," i d= "$d b >P a r a m( 0 ) ,a r r a y( 2 ) . ) ; $P e r s o n a 2=$a c t i v e A r r[ 0 ] ; e c h o" < p >N o m b r ep r i m e r o( d e b es e rJ u a n ) : " ,$p e r s o n >N a m e _ F i r s t ," < b r >C l a s s= " ,g e t _ c l a s s( $p e r s o n a 2 ) ;

Active Record eXtended


Este es el original a varios aplicacin Active Record presentada por Chris Ravenscroft (chris # voilaweb.com). La razn por la que estamos ofreciendo dos versiones es que la versin extendida es ms potente, pero ms complejo. Mi preferencia personal es que sea sencillo, pero su punto de vista puede variar. Para usarlo, basta con incluir adodb-activa-recordx.inc.php lugar de adodb-activa-record.inc.php. Se proporciona una nueva funcin llamada Buscar () que es muy intuitivo de usar como se muestra en el ejemplo a continuacin. Tambin soporta la carga de todas las relaciones con una sola consulta (mediante uniones).
< ?P h p a r _ a s s e r tf u n c i n( $o b j ,$c o n d ) { g l o b a l$e r r _ c o u n t ; $R e s=v a r _ e x p o r t( $o b j ,t r u e ) ; r e t u r n( s t r p o s( $r e s ,$c o n d ) ) ; } i n c l u d e _ o n c e( ' /a d o d b . i n c . p h p . . ' ) ; i n c l u d e _ o n c e( ' /a d o d b a c t i v a r e c o r d x . i n c . p h p . . ' ) ;

$D b=N e w A D O C o n n e c t i o n( ' m y s q l: //r o o t@l o c a l h o s t/n o r t e s ' ) ; $D b >d e b u g=0 ; A D O d b _ A c t i v e _ R e c o r d: :S e t D a t a b a s e A d a p t e r( $d b ) ; e c h o" < p r e >\n " ; e c h o" \n\n--\n" ; e c h o" P r e p a r a c i nd el ab a s ed ed a t o sm e d i a n t ec o n s u l t a sS Q L( c r e a c i nd e "p u e b l o" , "n i o s" )\n " ; $D b >E x e c u t e( " D R O PT A B L E `g e n t e' " ) ; $D b >E x e c u t e( " n i o sD R O P `t a b l a` " ) ; $D b >E j e c u t a r( l o s" C R E A T ET A B L E `` ( ` I d `i n t( 1 0 )N O TN U L LA U T O _ I N C R E M E N Ts i nf i r m a r , ` `V a r c h a rN a m e _ F i r s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rN a m e _ L a s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rf a v o r i t e _ c o l o r( 1 0 0 )N O TN U L LD E F A U L T ' ' , P R I M A R YK E Y( ` i d ` ) )E N G I N E=M y I S A M ; " ) ; $D b >E x e c u t e( " C R E A T ET A B L E `h i j o s' (

phplens.com/lens/adodb/docs-active-record.htm

11/14

18/06/13

ADOdb Active Record


` I d `i n t( 1 0 )N O TN U L LA U T O _ I N C R E M E N Ts i nf i r m a r , ` P e r s o n _ i d `i n t( 1 0 )N O TN U L Ls i nf i r m a r , ` `V a r c h a rN a m e _ F i r s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rN a m e _ L a s t( 1 0 0 )N O TN U L LD E F A U L T ' ' , ` `V a r c h a rf a v o r i t e _ p e t( 1 0 0 )N O TN U L LD E F A U L T ' ' , P R I M A R YK E Y( ` i d ` ) )E N G I N E=M y I S A M ; " ) ; $D b >E x e c u t e( " i n s e r ti n t on i o s( p e r s o n _ i d ,N a m e _ F i r s t ,N a m e _ L a s t ,f a v o r i t e _ p e t )v a l u e s ( 1 ,' J i l l ' ,' L i m ' ,' t o r t u g a ' ) " ) ; $D b >E x e c u t e( " i n s e r ti n t on i o s( p e r s o n _ i d ,N a m e _ F i r s t ,N a m e _ L a s t )v a l u e s ( 1 ,' J u a n a ' ,' L i m ' ) " ) ; $D b >E x e c u t e( " i n s e r ti n t on i o s( p e r s o n _ i d ,N a m e _ F i r s t ,N a m e _ L a s t )v a l u e s ( 1 ,' J a m i e ' ,' L i m ' ) " ) ; //E s t e_ i m p l i c i t e l y _c l a s es eb a s ae nl at a b l ad e l" p u e b l o "( f o r m ap l u r a ld e" p e r s o n a " ) P e r s o nc l a s ee x t i e n d eA D O d b _ A c t i v e _ R e c o r d { f u n c t i o n_ _c o n s t r u c t( ) { p a r e n t: :_ _ c o n s t r u c t( ) ; $T h i s >h a s M a n y( " n i o s " ) ; } } //E s t e_ i m p l i c i t e l y _c l a s es eb a s ae nl am e s ad el o s" n i o s " c l a s eC h i l de x t i e n d eA D O d b _ A c t i v e _ R e c o r d { f u n c t i o n_ _c o n s t r u c t( ) { p a r e n t: :_ _ c o n s t r u c t( ) ; $T h i s >b e l o n g s T o( " p e r s o n a " ) ; } } //E s t e_ e x p l i c i t e l y _c l a s es eb a s ae nl at a b l ayc o m p a r t es u sm e t a d a t o sc o ne ln i ol o s" n i o s " c l a s eK i de x t i e n d eA D O d b _ A c t i v e _ R e c o r d { f u n c t i o n_ _c o n s t r u c t( ) { p a r e n t: :_ _ c o n s t r u c t( " n i o s " ) ; $T h i s >b e l o n g s T o( " p e r s o n a " ) ; } } //E s t e_ e x p l i c i t e l y _c l a s es eb a s ae nl am e s ad el o s" n i o s " ,p e r on oc o m p a r t es u sm e t a d a t o s c l a s eR u g r a te x t i e n d eA D O d b _ A c t i v e _ R e c o r d { f u n c t i o n_ _c o n s t r u c t( ) { p a r e n t: :_ _ c o n s t r u c t( ' n i o s ' ,f a l s e ,f a l s e ,a r r a y( ' n u e v o '= >t r u e ) ) ; } } e c h o" p e r s o n aI n s e r c i ne nl at a b l a' p u e b l o '( ' J o h nL i m ,l eg u s t al al a v a n d a ' )\n " ; e c h o" --\n" ; $P e r s o n a=n e wP e r s o n( ) ; $P e r s o n >N a m e _ F i r s t=' J u a n ' ; $P e r s o n >N a m e _ L a s t=' L i m ' ; $P e r s o n >f a v o r i t e _ c o l o r=' L a v a n d a ' ; $P e r s o n >s a v e( ) ;//E s t oa h o r r ar e a l i z a r u nI N S E R Tc o n x i t o $E r r _ c o u n t=0 ; e c h o" \n\n--\n" ; e c h o" p e r s o n a >f i n d( ' i d=1 ' )[ M t o d od eL a z y ]\n " ; e c h o" p e r s o n aq u es ec a r g a ,p e r os u sh i j o ss ec a r g a r al ac a r t am sa d e l a n t e\n " ; e c h o" --\n" ; $P e r s o n 5=n e wP e r s o n( ) ; $P e r s o n a s 5=$p e r s o n 5 >f i n d( ' i d=1 ' ) ; e c h o( a r _ a s s e r t( $p e r s o n a s 5 ," ' N a m e _ F i r s t '= >' J o h n ' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ o h n\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $p e r s o n a s 5 ," ' f a v o r i t e _ p e t '= >' t o r t u g a ' " ) ) ?" S eh ae n c o n t r a d or e l a c i nc u a n d on od e b e r a\n[ ! ] " :" [ O K ]N oh a yr e l a c i na n\n " ; f o r e a c h( $p e r s o n a s 5c o m o$p e r s o n a ) { f o r e a c h( $p e r s o n >n i o sc o m o$i n f a n t i l ) { i f( $i n f a n t i l >N a m e _ F i r s t ) ; } } e c h o( a r _ a s s e r t( $p e r s o n a s 5 ," ' f a v o r i t e _ p e t '= >' t o r t u g a ' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nr e l a c i n :N i o\n " :" r e l a c i nM i s s i n g[ ! ] :N i o\n " ; e c h o" \n\n--\n" ; e c h o" p e r s o n a >f i n d( ' i d=1 '. . .A D O D B _ W O R K _ A R )[ M t o d oW o r k e r ]\n " ; e c h o" p e r s o n aq u es ec a r g a ,yt a m b i nl os o ns u sh i j o s\n " ; e c h o" --\n" ; $P e r s o n 6=n e wP e r s o n( ) ; $P e r s o n a s 6=$p e r s o n 6 >f i n d( ' i d=1 ' ,f a l s e ,f a l s e ,a r r a y( ' l o a d i n g '= >A D O D B _ W O R K _ A R ) ) ; e c h o( a r _ a s s e r t( $p e r s o n a s 6" , "N a m e _ F i r s t' = > 'J o h n' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ o h n\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $p e r s o n a s 6" , "f a v o r i t e _ p e t' = > 't o r t u g a' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nr e l a c i n :N i o\n " :" r e l a c i nM i s s i n g[ ! ] :N i o\n " ; e c h o" \n\n--\n" ; e c h o" p e r s o n a >f i n d( ' i d=1 '. . .A D O D B _ J O I N _ A R )[ I n g r e s om t o d o ]\n " ; e c h o" p e r s o n ays u sh i j o ss ec a r g a nm e d i a n t eu n a n i c ac o n s u l t a\n " ; e c h o" --\n" ; $P e r s o n 7=n e wP e r s o n( ) ; //C u a n d ol ep r e g u n t oe s p e c f i c a m e n t ep a r au n ac o m b i n a c i n ,t e n g oq u ee s p e c i f i c a rq u t a b l aI d e n t i f i c a c i nB u s c oa //D el oc o n t r a r i oe la n a l i z a d o rd eS Q Ls ep r e g u n t a r Q u i d e n t i f i c a d o rd et a b l aq u es e r a . $P e r s o n a s 7=$p e r s o n 7 >f i n d( ' p e o p l e . i d=1 ' ,f a l s e ,f a l s e ,a r r a y( ' l o a d i n g '= >A D O D B _ J O I N _ A R ) ) ; e c h o( a r _ a s s e r t( $p e r s o n a s 7" , "N a m e _ F i r s t' = > 'J o h n' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ o h n\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $p e r s o n a s 7" , "f a v o r i t e _ p e t' = > 't o r t u g a' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nr e l a c i n :N i o\n " :" r e l a c i nM i s s i n g[ ! ] :N i o\n " ;

phplens.com/lens/adodb/docs-active-record.htm

12/14

18/06/13

ADOdb Active Record


e c h o" \n\n--\n" ; e c h o" p e r s o n a >L o a d( ' p e o p l e . i d=1 ' )[ M t o d od eI n g r e s o ]\n " ; e c h o" L o a d( )s i e m p r eu t i l i z ae lm t o d oj o i ny aq u es l od e v u e l v eu n af i l a\n " ; e c h o" --\n" ; $P e r s o n a 2=n e wP e r s o n( ) ; //B a j oe lc a p ,l o a d( ) ,y aq u es l od e v u e l v eu n af i l a ,r e a l i c es i e m p r eu n au n i n //P o rl ot a n t o ,t e n e m o sq u ea c l a r a rq u I d e n t i f i c a c i nd e lq u ee s t a m o sh a b l a n d o . $P e r s o n a 2 >L o a d( ' p e o p l e . i d=1 ' ) ; e c h o( a r _ a s s e r t( $p e r s o n a 2" , "N a m e _ F i r s t' = > 'J o h n' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ o h n\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $p e r s o n a 2" , "f a v o r i t e _ p e t' = > 't o r t u g a' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nr e l a c i n :N i o\n " :" r e l a c i nM i s s i n g[ ! ] :N i o\n " ; e c h o" \n\n--\n" ; e c h o" n i o >L o a d( ' c h i l d r e n . i d=1 ' )[ M t o d od eI n g r e s o ]\n " ; e c h o" A h o r an o se s t a m o sc a r g a n d oal am e s ad el o s "n i o s" ,n od e l "p u e b l o" \n " ; e c h o" --\n" ; $C h=n e wC h i l d( ) ; $C h >L o a d( ' c h i l d r e n . i d=1 ' ) ; e c h o( a r _ a s s e r t( $c h" , "N a m e _ F i r s t' = > 'J i l l' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ i l l\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $c h" , "f a v o r i t e _ c o l o r' = > 'L a v a n d a' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nr e l a c i n :p e r s o n a\n " :" F a l t ar e l a c i n[ ! ] :P e r s o n a\n " ; e c h o" \n\n--\n" ; e c h o" n i o >f i n d( ' c h i l d r e n . i d=1 '. . .A D O D B _ W O R K _ A R )[ M t o d oW o r k e r ]\n " ; e c h o" --\n" ; $C h 2=n e wC h i l d( ) ; $A C H 2=$c h 2 >f i n d( ' i d=1 ' ,f a l s e ,f a l s e ,a r r a y( ' l o a d i n g '= >A D O D B _ W O R K _ A R ) ) ; e c h o( a r _ a s s e r t( $A C H 2" , "N a m e _ F i r s t' = > 'J i l l' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ i l l\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $A C H 2" , "f a v o r i t e _ c o l o r' = > 'L a v a n d a' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nr e l a c i n :p e r s o n a\n " :" F a l t ar e l a c i n[ ! ] :P e r s o n a\n " ; e c h o" \n\n--\n" ; e c h o" k i d >f i n d( ' c h i l d r e n . i d=1 '. . .A D O D B _ W O R K _ A R )[ M t o d oW o r k e r ]\n " ; e c h o" C u a n d ov e m o sq u el a sr e l a c i o n e sd e ln i oc o m p a r t ec o ne ln i oy aq u es ea l m a c e n a n\n " ; e c h o" e nl ae s t r u c t u r ad el o sm e t a d a t o sd el at a b l ac o m m o n\n . " ; e c h o" --\n" ; $C H 3=n e wK i d( " n i o s " ) ; $A c h 3 =$C H 3 >f i n d( ' c h i l d r e n . i d=1 ' ,f a l s e ,f a l s e ,a r r a y( ' l o a d i n g '= >A D O D B _ W O R K _ A R ) ) ; e c h o( a r _ a s s e r t( $a c h 3" , "N a m e _ F i r s t' = > 'J i l l' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ i l l\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $a c h 3" , "f a v o r i t e _ c o l o r' = > 'L a v a n d a' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nr e l a c i n :p e r s o n a\n " :" F a l t ar e l a c i n[ ! ] :P e r s o n a\n " ; e c h o" \n\n--\n" ; e c h o" k i d >f i n d( ' c h i l d r e n . i d=1 '. . .A D O D B _ L A Z Y _ A R )[ M t o d od eL a z y ]\n " ; e c h o" P o rs u p u e s t o ,l ac a r g ad i f e r i d at a m b i nr e c u p e r a ri n f o r m a c i nM e d a t a. . .\n " ; e c h o" --\n" ; $C H 3 2=n e wK i d( " n i o s " ) ; $A c h 3 2=$C H 3 2 >f i n d( ' c h i l d r e n . i d=1 ' ,f a l s e ,f a l s e ,a r r a y( ' l o a d i n g '= >A D O D B _ L A Z Y _ A R ) ) ; e c h o( a r _ a s s e r t( $a c h 3 2" , "N a m e _ F i r s t' = > 'J i l l' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ i l l\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $a c h 3 2" , "f a v o r i t e _ c o l o r' = > 'L a v a n d a' " ) ) ?" S eh ae n c o n t r a d or e l a c i nc u a n d on od e b e r a\n[ ! ] " :" [ O K ]N oh a yr e l a c i na n\n " ; f o r e a c h( $a c h 3 2c o m o$a k i d ) { i f( $a k i d >p e r s o n a ) ; } e c h o( a r _ a s s e r t( $a c h 3 2" , "f a v o r i t e _ c o l o r' = > 'L a v a n d a' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nr e l a c i n :p e r s o n a\n " :" F a l t ar e l a c i n[ ! ] :P e r s o n a\n " ; e c h o" \n\n--\n" ; e c h o" R u g r a t >f i n d( ' c h i l d r e n . i d=1 '. . .A D O D B _ W O R K _ A R )[ M t o d oW o r k e r ]\n " ; e c h o" E ne lc o n s t r u c t o rd eR u g r a ts ee s p e c i f i c aq u e\n i td e b eo l v i d a rc u a l q u i e rr e l a c i ne x i s t e n t e\n " ; e c h o" --\n" ; $C H 4=n e wR u g r a t( " n i o s " ) ; $A C H 4=$C H 4 >f i n d( ' c h i l d r e n . i d=1 ' ,f a l s e ,f a l s e ,a r r a y( ' l o a d i n g '= >A D O D B _ W O R K _ A R ) ) ; e c h o( a r _ a s s e r t( $A C H 4" , "N a m e _ F i r s t' = > 'J i l l' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ i l l\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $A C H 4" , "f a v o r i t e _ c o l o r' = > 'L a v a n d a' " ) ) ?" S eh ae n c o n t r a d or e l a c i nc u a n d on od e b e r a\n[ ! ] " :" [ O K ]N os ee n c o n t r r e l a c i n\n " ;

e c h o" \n\n--\n" ; e c h o" k i d >f i n d( ' c h i l d r e n . i d=1 '. . .A D O D B _ W O R K _ A R )[ M t o d oW o r k e r ]\n " ; e c h o" O b s e r v ec m os l oR u g r a to l v i d s u sr e l a c i o n e s-c h i c oe s t b i e n\n . " ; e c h o" --\n" ; $C h 5=n e wK i d( " n i o s " ) ; $A c h 5=$c h 5 >f i n d( ' c h i l d r e n . i d=1 ' ,f a l s e ,f a l s e ,a r r a y( ' l o a d i n g '= >A D O D B _ W O R K _ A R ) ) ; e c h o( a r _ a s s e r t( $a c h 5" , "N a m e _ F i r s t' = > 'J i l l' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ i l l\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $a c h 5" , "f a v o r i t e _ c o l o r' = > 'L a v a n d a' " ) ) ?" [ ! ]N od e b e r ah a b e ro l v i d a d or e l a c i n : :p e r s o n a\n "" [ O K ]N oo l v i d r e l a c i n :p e r s o n a\n " e c h o" \n\n--\n" ; e c h o" R u g r a t >f i n d( ' c h i l d r e n . i d=1 '. . .A D O D B _ W O R K _ A R )[ M t o d oW o r k e r ]\n " ; e c h o" --\n" ; $C h 6=n e wR u g r a t( " n i o s " ) ; $C h 6 s=$c h 6 >f i n d( ' c h i l d r e n . i d=1 ' ,f a l s e ,f a l s e ,a r r a y( ' l o a d i n g '= >A D O D B _ W O R K _ A R ) ) ; $A c h 6=$c h 6 s[ 0 ] ; e c h o( a r _ a s s e r t( $a c h 6" , "N a m e _ F i r s t' = > 'J i l l' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nJ i l l\n " :" [ ! ]B u s c a rf a l l a d o\n " ; e c h o( a r _ a s s e r t( $a c h 6" , "f a v o r i t e _ c o l o r' = > 'L a v a n d a' " ) ) ?" S eh ae n c o n t r a d or e l a c i nc u a n d on od e b e r a\n[ ! ] " :" [ O K ]N oh a yr e l a c i na n\n " ; e c h o" \n C a r g a n d or e l a c i o n e s :\n " ; $A c h 6 >b e l o n g s T o( " p e r s o n a " ) ; $A c h 6 >L o a d R e l a t i o n s( ' p e r s o n ' ,e l' o r d e np o ri d ' ,0 ,2 ) ; e c h o( a r _ a s s e r t( $a c h 6" , "f a v o r i t e _ c o l o r' = > 'L a v a n d a' " ) ) ?" [ O K ]Q u es ee n c u e n t r a nr e l a c i n :p e r s o n a\n " :" F a l t ar e l a c i n[ ! ] :P e r s o n a\n " ; e c h o" \n\n--\n" ; e c h o" s u i t ec o m p l e t aT e s t\n . " ; e c h o" --\n" ; ? >

Todo (Cdigo Contribuciones bienvenidos)


Compruebe los valores de campo _Original y corriente antes de la actualizacin, slo actualizar los cambios. Adems, si se cambia el valor de clave principal y, a continuacin en la actualizacin, hay que guardar y utilizar los valores de clave principal originales en la clusula WHERE! PHP5 especfica: Hacer GetActiveRecords * () devuelve un iterador.
phplens.com/lens/adodb/docs-active-record.htm 13/14

18/06/13

ADOdb Active Record

PHP5 especfica: Cambio PHP5 implementacin de Active Record utilizar __ get () y __ set () para un mejor rendimiento.

Cambio de registro
0.93 Puede forzar los nombres de columnas que se indican en las instrucciones INSERT y UPDATE, normalmente porque est utilizando las palabras reservadas como nombres de columna estableciendo ADODB_Active_Record :: $ _quoteNames = true; 0.92 Se han solucionado algunos problemas con los modos incompatibles fetch (ADODB_FETCH_ASSOC) que causan problemas en UpdateActiveTable. Aadido soporte para funciones de apoyo predefinir uno-a-muchos: ClassHasMany ClassBelongsTo TableHasMany TableBelongsTo TableKeyHasMany TableKeyBelongsTo . Tambin puede definir su hijo / clase principal en estas funciones, en lugar de la ADODB_Active_Record defecto. 0.91 HasMany codificado nombre del campo clave principal de "id". Fijo. 0.90 Apoyo a belongsTo y hasMany. Gracias a Chris Ravenscroft (chris # voilaweb.com). LoadRelations Aadido (). 0.08 Agregado soporte para arrays Assoc en Set (). 0.07 $ ADODB_ASSOC_CASE = 2 no funcionaba correctamente. Fijo. Aadido === llegada ADODB_SetDatabaseAdapter por $ db, adodb-activa-record.inc.php. Thx cristiana Affolter. 0.06 Aadido ErrorNo (). Fijo php 5.2.0 temas compat. 0.05 Si la insercin de un registro y el valor de un campo de clave principal es nulo, entonces no insertamos ese campo en que se supone que es un campo de incremento automtico. Necesario para mssql. 0.04 05 de junio 2006 Aadido soporte para la declaracin de nombre de tabla en $ _table en la declaracin de clase. Thx Bill Dueber de idea. Aadido find ($ donde $ bindarr = false) para recuperar un conjunto de objetos de registro de activos. 0.03 - Ahora slo actualizar los campos que han cambiado, usando $ this-> _original. - No se incluyen los campos AUTO_INCREMENT en replace (). Thx Travis Cline - ADODB_ACTIVE_CACHESECS aadi. 0.02 - Mucho mejor gestin de errores. ErrorMsg () implementado. El tiro ejecutado si adodb-exceptions.inc.php detectado. - Ahora puede definir las claves principales de la vista o tabla que est accediendo manualmente. - El Active Record le permite crear un objeto que no tiene una clave principal. Puede insertar, pero no actualizarse en este caso. - Set () documentado. - Corregido bug con _pluralize y sufijo. 0.01 06 de marzo 2006 - Arregla tratamiento de valores NULL al ahorro (que no salv a los nulos, los salv como''). - Mejor manejo de mensajes de error. - factorizada un nuevo mtodo getPrimaryKeys (). 0.00 05 de marzo 2006 primera versin

phplens.com/lens/adodb/docs-active-record.htm

14/14

You might also like