Professional Documents
Culture Documents
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.
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
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.
Una gran diferencia entre la aplicacin ADOdb y de Zend es no nos convertimos automticamente en camelCaps estilo.
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
*/
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.
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 ' ;
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
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 ) ) ;
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.
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 ' ) ;
//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( ) ;
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.
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
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( ) ;
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
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' )
phplens.com/lens/adodb/docs-active-record.htm
7/14
18/06/13
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
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
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 ' ) ) ;
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.
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 " * } */
$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 ) ;
$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
phplens.com/lens/adodb/docs-active-record.htm
12/14
18/06/13
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" ; ? >
18/06/13
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