Array Query le permite realizar consultas en matrices multidimensionales.
Esta biblioteca es adecuada para usted si necesita realizar algunas consultas en:
Para instanciar la consulta, haga lo siguiente:
use ArrayQuery QueryBuilder ;
$ array = [
[
' id ' => 1 ,
' title ' => ' Leanne Graham ' ,
' email ' => ' [email protected] ' ,
' rate ' => 5 ,
' company ' => [
' name ' => ' Romaguera-Jacobson ' ,
' catchPhrase ' => ' Face to face bifurcated interface ' ,
' bs ' => ' e-enable strategic applications '
]
],
[
' id ' => 2 ,
' title ' => ' Ervin Howell ' ,
' email ' => ' [email protected] ' ,
' rate ' => 3 ,
' company ' => [
' name ' => ' Robel-Corkery ' ,
' catchPhrase ' => ' Multi-tiered zero tolerance productivity ' ,
' bs ' => ' transition cutting-edge web services '
]
],
[
' id ' => 3 ,
' title ' => ' Clementine Bauch ' ,
' email ' => ' [email protected] ' ,
' rate ' => 4 ,
' company ' => [
' name ' => ' Keebler LLC ' ,
' catchPhrase ' => ' User-centric fault-tolerant solution ' ,
' bs ' => ' revolutionize end-to-end systems '
]
],
// ..
]
QueryBuilder:: create ( $ array );
// to add an element to your array. Do this BEFORE make a query on the array
$ element = [
' id ' => 4 ,
' title ' => ' Patricia Lebsack ' ,
' email ' => ' [email protected] ' ,
' rate ' => 2 ,
' company ' => [
' name ' => ' Robel-Corkery ' ,
' catchPhrase ' => ' Multi-tiered zero tolerance productivity ' ,
' bs ' => ' transition cutting-edge web services '
]
];
$ qb -> addElement ( $ element , 4 );
// to remove an element from array by his key. Do this BEFORE make a query on the array
$ qb -> removeElement ( 3 ); ConsultaBuilder verifica la consistencia de sus datos. Si se detecta una inconsistencia, se planteará una NotConsistentDataException :
use ArrayQuery QueryBuilder ;
$ array = [
[
' id ' => 1 ,
' title ' => ' Leanne Graham ' ,
' email ' => ' [email protected] ' ,
' rate ' => 5 ,
' company ' => [
' name ' => ' Romaguera-Jacobson ' ,
' catchPhrase ' => ' Face to face bifurcated interface ' ,
' bs ' => ' e-enable strategic applications '
]
],
[
' id ' => 2 ,
' title ' => ' Ervin Howell ' ,
' email ' => ' [email protected] ' ,
' rate ' => 3 ,
' company ' => [
' name ' => ' Robel-Corkery ' ,
' catchPhrase ' => ' Multi-tiered zero tolerance productivity ' ,
' bs ' => ' transition cutting-edge web services '
]
],
[
' id ' => 3 ,
' title ' => ' Clementine Bauch ' ,
' email ' => ' [email protected] ' ,
' rate ' => 4 ,
' company ' => [
' name ' => ' Keebler LLC ' ,
' catchPhrase ' => ' User-centric fault-tolerant solution ' ,
' bs ' => ' revolutionize end-to-end systems '
],
' extra-field ' => ' this is an extra field '
],
]
// NotConsistentDataException will be raised
QueryBuilder:: create ( $ array );Puede realizar consultas en su matriz. Puede concatenar los criterios:
use ArrayQuery QueryBuilder ;
// ..
$ qb = QueryBuilder:: create ( $ array );
$ qb
-> addCriterion ( ' title ' , ' Leanne ' , ' CONTAINS ' )
-> addCriterion ( ' rate ' , ' 3 ' , ' > ' )
-> sortedBy ( ' title ' , ' DESC ' );
// you can search by nested keys
$ qb -> addCriterion ( ' company.name ' , ' Romaguera-Jacobson ' );
// get results
foreach ( $ qb -> getResults () as $ element ){
// ...
}
// get first result
$ first = $ qb -> getFirstResult ();
// get last result
$ last = $ qb -> getLastResult ();
// get a result by index
$ thirdResult = $ qb -> getResult ( 3 );= (Operador predeterminado, se puede omitir)><<=>=!=ARRAY_MATCHCONTAINS (caso insensible)ENDS_WITHEQUALS_DATEGT_DATEGTE_DATEIN_ARRAYIN_ARRAY_INVERSEDLT_DATELTE_DATESTARTS_WITHASC (se puede omitir el operador predeterminado)DESCDATE_ASCDATE_DESC Puedes unirte a matrices. Considere este ejemplo completo:
use ArrayQuery QueryBuilder ;
$ users = [
[
' id ' => 1 ,
' name ' => ' Mauro Cassani ' ,
' id_category ' => 3 ,
' email ' => ' [email protected] '
],[
' id ' => 2 ,
' name ' => ' Mario Rossi ' ,
' id_category ' => 3 ,
' email ' => ' [email protected] '
],[
' id ' => 3 ,
' name ' => ' Maria Bianchi ' ,
' id_category ' => 1 ,
' email ' => ' [email protected] '
]
];
$ category = [
' id ' => 3 ,
' name ' => ' Web Developer '
];
$ qb = QueryBuilder:: create ( $ users )
-> join ( $ category , ' category ' , ' id_category ' , ' id ' )
-> addCriterion ( ' category.id ' , 3 );
foreach ( $ qb -> getResults () as $ element ){
// ...
}Puede agregar criterios y especificar límite y compensación para los resultados de su consulta:
use ArrayQuery QueryBuilder ;
$ qb = QueryBuilder:: create ( $ array );
$ qb
-> addCriterion ( ' title ' , [ ' Leanne ' ], ' IN_ARRAY ' )
-> addCriterion ( ' rate ' , ' 3 ' , ' > ' )
-> sortedBy ( ' title ' )
-> limit ( 0 , 10 );
foreach ( $ qb -> getResults () as $ element ){
// ...
} Puede realizar consultas basadas en los campos de fecha y hora. Puede usar el operador DATE_ASC o DATE_DESC para ordenar los resultados por fecha. Debe especificar el formato de fecha si su formato no es YYYY-mm-dd :
use ArrayQuery QueryBuilder ;
$ qb = QueryBuilder:: create ( $ array );
$ qb
-> addCriterion ( ' registration_date ' , ' 01/05/2017 ' , ' GT_DATE ' , ' d/m/Y ' )
-> addCriterion ( ' rate ' , ' 3 ' , ' > ' )
-> sortedBy ( ' registration_date ' , ' DATE_DESC ' , ' d/m/Y ' )
-> limit ( 0 , 10 );
foreach ( $ qb -> getResults () as $ element ){
// ...
} Puede usar alias utilizando la palabra as como delimitador. Haz lo siguiente:
use ArrayQuery QueryBuilder ;
$ qb = QueryBuilder:: create ( $ array );
$ qb
-> addCriterion ( ' name as n ' , ' Ervin Howell ' )
-> addCriterion ( ' username as user ' , ' Antonette ' )
-> addCriterion ( ' address.street as street ' , ' Victor Plains ' );
foreach ( $ qb -> getResults () as $ element ){
// ...
// now you have
// $element['n']
// $element['user']
// $element['street']
} Puede barajar los resultados de la consulta utilizando el método getShuffledResults :
use ArrayQuery QueryBuilder ;
$ qb = QueryBuilder:: create ( $ array );
foreach ( $ qb -> getShuffledResults () as $ element ){
// ...
}Consulte QueryBuilderTest para obtener más ejemplos.
Si encontró un problema o tuvo una idea, consulte esta sección.
Este proyecto tiene licencia bajo la licencia MIT: consulte el archivo de licencia.md para más detalles