Query builder
Query builder
The query builder is based on the powerful foundation provided by Opis Database library, and offers methods for fetching, updating or deleting records.
Fetching entities
The query builder provides several methods for fetching records as entities
find
This method is used when you want to fetch an entity by its ID.
use Opis\ORM\EntityManager;
use Opis\Database\Connection;
use My\Blog\User;
$connection = new Connection("mysql:dbname=test", "root", "secret");
$orm = new EntityManager($connection);
$user = $orm->query(User::class)->find(1);
// Or, alternatively
$user = $orm(User::class)->find(1);
findAll
This methods takes as arguments as series of entity IDs and try to fetch them.
$users = $orm(User::class)->findAll(1, 2, 3, 4); // Use multiple IDs
all
This methods returns an array of entity instances, or an empty array if no records were found
// Returns all entities
$users = $orm(User::class)->all();
get
Use this method for fetching a single instance of an entity from a query. This
will return null
if no entity was fetched.
// Returns one entity instance
$users = $orm(User::class)->get();
Building queries
A more complete documentation about query building can be found by reading the Query builder chapter of the Opis Database library.
Filter
You can filter the entities returned by a query by using the where
method.
//** User[] $users */
$users = $orm(User::class)
->where('age')->atLeast(18)
->all();
Order
Entities can be ordered by using the orderBy
method.
//** User[] $users */
$users = $orm(User::class)
->where('age')->atLeast(18)
->orderBy('age', 'asc')
->all();
Offsets and limits
You can limit the number of entities your query returns by using the limit
method.
//** User[] $users */
$users = $orm(User::class)
->where('age')->atLeast(18)
->orderBy('age', 'asc')
->limit(10)
->all();
Use the offset
method in conjunction with limit
to skip and ignore the first
n
records.
$users = $orm(User::class)
->where('age')->atLeast(18)
->orderBy('age', 'asc')
->offset(20) // Ignore first 20 records
->limit(10)
->all();
Updating entities
Updating multiple entities from a single query is possible by using the update
method.
$orm(User::class)
->where('age')->is(18)
->update([
'age' => 19
]);
You can use the increment
and decrement
methods to increment or decrement the value of column.
$orm(User::class)
->where('age')->is(18)
->increment('age'); // Increment by 1
$orm(User::class)
->where('age')->is(21)
->decrement('age', 2); // Decrement by 2
Deleting entities
Deleting multiple entities at once is done by using the delete
method.
// Delete all users
$orm(User::class)->delete();
// Delete users under 13
$orm(User::class)
->where('age')->lessThan(13)
->delete();