项目作者: samir64

项目描述 :
PHP's Integrated Query Language
高级语言: PHP
项目地址: git://github.com/samir64/piqla.git
创建时间: 2018-05-10T10:35:59Z
项目社区:https://github.com/samir64/piqla

开源协议:MIT License

下载


Piqla v1.2.1

Available methods

  1. function Pinq(array $input = []); // Constructor
  2. function where(callable $func): Pinq;
  3. function select(callable $func): Pinq;
  4. function delete(callable $func): Pinq;
  5. function update(callable $func): Pinq;
  6. function insert(callable $func): Pinq;
  7. function orderBy(boolean $accending, callable $func): Pinq;
  8. function orderAscendingBy(callable $func): Pinq;
  9. function orderDescendingBy(callable $func): Pinq;
  10. function distinct(): Pinq;
  11. function join(array $list, callable $where, callable $select): Piqla;
  12. function group(callable $heads, callable $select): Piqla[];
  13. function count(): int;
  14. function min(callable $func, boolean $return_item = true): mixed;
  15. function max(callable $func, boolean $return_item = true): mixed;
  16. function sum(callable $func): number;
  17. function average(callable $func): Pinq;
  18. function limit(int $count, int $offset): Pinq;
  19. function offset(int $offset): Pinq;
  20. function fromJsonString(string $json);
  21. function toJsonString(): string;
  22. function toArray(): array;

How to use

Define an array and pass that to new Piqla instance constructor

Callback functions must have one argument

This argument (its name doen’t matter) is current item in list for each loop cycle

just join function has two arguments. the second argument is joined list’s item

Now you can use Piqla deformer functions and call them on returned result again and again and … (like bellow samples)

Sample

  1. $persons = new Piqla([
  2. [
  3. "_id" => 1,
  4. "name" => "jack",
  5. "family" => "gonjishke",
  6. "age" => 45
  7. ],
  8. [
  9. "_id" => 2,
  10. "name" => "joe",
  11. "family" => "gandomi",
  12. "age" => 32
  13. ],
  14. [
  15. "_id" => 3,
  16. "name" => "jack",
  17. "family" => "landan",
  18. "age" => 23
  19. ],
  20. [
  21. "_id" => 4,
  22. "name" => "john",
  23. "family" => "val john",
  24. "age" => 63
  25. ]
  26. ]);
  27. $addresses = new Piqla([
  28. ["_id" => 1, "person_id" => 2, "phone_number" => "12398747", "country" => "near", "city" => "here", "street" => "here 1", "since" => "2017/02/12"],
  29. ["_id" => 2, "person_id" => 1, "phone_number" => "22118965", "country" => "far", "city" => "there", "street" => "there 12", "since" => "2015/07/03"],
  30. ["_id" => 3, "person_id" => 2, "phone_number" => "55663322", "country" => "near", "city" => "here", "street" => "here 2", "since" => "2018/03/01"],
  31. ["_id" => 4, "person_id" => 3, "phone_number" => "74653689", "country" => "far", "city" => "right of there", "street" => "rot 3", "since" => "2016/05/23"],
  32. ["_id" => 5, "person_id" => 1, "phone_number" => "77441122", "country" => "near", "city" => "near of hear", "street" => "noh 23", "since" => "2017/10/11"]
  33. ]);

where()

  1. $persons->where(function ($item) {
  2. return ($item["age"] > 35);
  3. });
  4. // Result: [{_id: 1, name: "jack", family: "gonjishke", age: 45},{_id: 4, name: "john", family: "val john", age: 63}]

select()

  1. $persons->select(function ($item) {
  2. return ["fullname" => $item["family"] . ", " . $item["name"], "old" => ($item["age"] > 40)];
  3. });
  4. // Result: [fullname: "gonjishke, jack", old: true}, {fullname: "gandomi, joe", old => false}, {fullname: "landan, jack" old: false}, {fullname: "val john, john", old: true}]
  5. $persons->select(function ($item) {
  6. if ($item["age"] > 40) return ["fullname" => $item["family"] . ", " . $item["name"]];
  7. });
  8. // Result: [fullname: "gonjishke, jack", {fullname: "val john, john"}]

delete()

  1. $persons->delete(function ($item) {
  2. return $item["age"] < 40;
  3. });
  4. // Result: [_id: 1, name: "jack", family: "gonjishke", age: 45}, {_id: 4, name: "john", family: "val john", age: 63}]

update()

  1. $persons->update(function ($item) {
  2. if ($item["age"] > 40)
  3. return ["age" => round($item["age"] / 2), "old" => true];
  4. else
  5. return ["old" => false];
  6. });
  7. // Result: [_id: 1, name: "jack", family: "gonjishke", age: 23, old: true}, {_id: 2, name: "joe", family: "gandomi", age: 32, old: false}, {_id: 3, name: "jack", family: "landan", age: 23, old: false}, {_id: 4, name: "john", family: "val john", age: 32, old: true}]

insert()

  1. $persons->insert(function () {
  2. return ["name" => "nicol", "family" => "cadmiom", "old" => true];
  3. });
  4. // Result: [_id: 1, name: "jack", family: "gonjishke", age: 45, old: NULL}, {_id: 2, name: "joe", family: "gandomi", age: 32, old: NULL}, {_id: 3, name: "jack", family: "landan", age: 23, old: NULL}, {_id: 4, name: "john", family: "val john", age: 63, old: NULL}, {_id: NULL, name: "nicol", family: "cadmiom", old: true, age: NULL}]

orderBy()

  1. $persons->orderBy(["name" => false, "age" => true])
  2. // Result: [{"_id":4,"name":"john","family":"val john","age":63},{"_id":2,"name":"joe","family":"gandomi","age":32},{"_id":3,"name":"jack","family":"landan","age":23},{"_id":1,"name":"jack","family":"gonjishke","age":45}]
  1. $persons->orderDescendingBy(function ($item) {
  2. return [$item["age"] > 35, -$item["age"]];
  3. });
  4. // Result: [_id: 1, name: "jack", family: "gonjishke", age: 45}, {_id: 4, name: "john", family: "val john", age: 63}, {_id: 3, name: "jack", family: "landan", age: 23}, {_id: 2, name: "joe", family: "gandomi", age: 32}]

distinct()

  1. $persons->name->distinct();
  2. // Result: [name: "jack"}, {name: "joe"}, {name: "john"}]

join()

  1. $persons->join($addresses->toArray(), function ($left, $right) {
  2. return ($left["_id"] == $right["person_id"]);
  3. }, , function ($left, $right) {
  4. return ["full_name" => $left["family"] . ", " . $left["name"], "phone_number" => $right["phone_number"], "address" => $right["street"] . ", " . $right["city"] . ", " . $right["country"]];
  5. });
  6. // Result: [{"full_name":"gonjishke, jack","phone_number":"22118965","address":"there 12, there, far"},{"full_name":"gonjishke, jack","phone_number":"77441122","address":"noh 23, near of hear, near"},{"full_name":"gandomi, joe","phone_number":"12398747","address":"here 1, here, near"},{"full_name":"gandomi, joe","phone_number":"55663322","address":"here 2, here, near"},{"full_name":"landan, jack","phone_number":"74653689","address":"rot 3, right of there, far"}]

group()

  1. $addresses->group(function ($item) {
  2. return $item["country"];
  3. }, function ($item) {
  4. return ["_id" => $item["_id"], "person_id" => $item["person_id"]];
  5. });
  6. // Result: {"near":[{"_id":1,"person_id":2},{"_id":3,"person_id":2},{"_id":5,"person_id":1}],"far":[{"_id":2,"person_id":1},{"_id":4,"person_id":3}]}

count()

  1. $persons->count();
  2. // Result: 4

min()

  1. $persons->min(function ($item) {
  2. if ($item["name"] == "jack") {
  3. return $item["age"];
  4. }
  5. });
  6. // Result: {_id: 3, name: "jack", family: "landan", age: 23}
  7. $persons->min(function ($item) {
  8. if ($item["name"] != "jack") {
  9. return strlen($item["name"]);
  10. }
  11. });
  12. // Result: {_id: 2, name: "joe", family: "gandomi", age: 32}

max()

  1. $persons->max(function ($item) {
  2. if ($item["name"] == "jack") {
  3. return $item["age"];
  4. }
  5. });
  6. // Result: {_id: 1, name: "jack", family: "gonjishke", age: 45}
  7. $persons->max(ffunction ($item) {
  8. if ($item["name"] != "jack") {
  9. return strlen($item["name"]);
  10. }
  11. });
  12. // Result: {_id: 4, name: "john", family: "val john", age: 63}

sum()

  1. $persons->sum(function ($item) {
  2. if ($item["name"] == "jack") {
  3. return $item["age"];
  4. }
  5. });
  6. // Result: 68
  7. $persons->sum(function ($item) {
  8. if ($item["name"] != "jack") {
  9. return strlen($item["name"]);
  10. }
  11. });
  12. // Result: 7

average()

  1. $persons->average(function ($item) {
  2. if ($item["name"] == "jack") {
  3. return $item["age"];
  4. }
  5. });
  6. // Result: 34
  7. $persons->average(function ($item) {
  8. if ($item["name"] != "jack") {
  9. return strlen($item["name"]);
  10. }
  11. });
  12. // Result: 3.5

limit()

  1. $persons->limit(2, 1);
  2. // Result: [_id: 2, name: "joe", family: "gandomi", age: 32}, {_id: 3, name: "jack", family: "landan", age: 23}]

offset()

  1. $persons->offset(2);
  2. // Result: [_id: 3, name: "jack", family: "landan", age: 23}, {_id: 4, name: "john", family: "val john", age: 63}]