Thanks to visit codestin.com
Credit goes to timetoogo.github.io

Build Quality Coverage Release License

PINQ

PHP Integrated query

View project onGitHub

What is PINQ?

Based off the .NET's LINQ (Language integrated query), PINQ unifies querying across arrays/iterators and external data sources, in a single readable and concise fluent API.

A quick example

The following shows an example query using the PINQ library:

$youngPeopleDetails = $people
        ->where(function ($row) { return $row['age'] <= 50; })
        ->orderByAscending(function ($row) { return $row['firstName']; })
        ->thenByAscending(function ($row) { return $row['lastName']; })
        ->take(50)
        ->indexBy(function ($row) { return $row['phoneNumber']; })
        ->select(function ($row) { 
            return [
                'fullName'     => $row['firstName'] . ' ' . $row['lastName'],
                'address'       => $row['address'],
                'dateOfBirth' => $row['dateOfBirth'],
            ]; 
        })

The beauty of PINQ is as follows, the above query may be executing against a set of arrays or possibly against database table. PINQ blurs the lines between in-memory and external data-source, using the most powerful and natural language available to PHP developers: ... PHP.

Why PINQ?

Considering the vast number of LINQ implementations currently available for php, why another? Besides the fact most of the others are incomplete/broken without a maintainer nor contributors, they are not real LINQ implementations. Sure, offering some nice array handling syntax is cool, but not only what LINQ is about. PINQ aims to provide:

  • Well structured and tested code base
  • Full composer and PSR-4 support
  • Complete and thorough documentation
  • LINQ-style fluent query API with lazy evaluation and immutable query objects
  • Truly seamless external query support
  • Full support for PHP closures and callable syntax
  • And even building on the original LINQ with offering an additional mutable query API

Installation

Add the package to your composer.json:

{
    "require": {
        "timetoogo/pinq": "~3.3"
    }
}