1. Go to this page and download the library: Download gforces/active-record library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
gforces / active-record example snippets
use Gforces\ActiveRecord\Base;
use Gforces\ActiveRecord\Column;
class Vehicle extends Base
{
#[Column] public int $id;
#[Column] public string $make;
#[Column] public ?string $model;
}
$vehicle = new Vehicle();
$vehicle->make = 'BMW';
$vehicle->model = 'X1';
$vehicle->save();
Vehicle::find(1)->model;
use Gforces\ActiveRecord\Base;
use Gforces\ActiveRecord\Column;
class Vehicle extends Base
{
#[Column(autoIncrement: false)] public int $id;
#[Column] public string $make;
}
use Gforces\ActiveRecord\Base;
use Gforces\ActiveRecord\Column;
use Gforces\ActiveRecord\PrimaryKey;
class Vehicle extends Base
{
#[Column(autoIncrement: true)] public int $evidenceNo;
#[Column] #[PrimaryKey] public string $make;
#[Column] #[PrimaryKey] public string $model;
}
enum Status
{
case online;
case offline;
}
class User extends Base
{
#[Column]
public int $id;
#[Column]
public Status $status;
}
use Gforces\ActiveRecord\Base;
use Gforces\ActiveRecord\StringableProperty;
class UserImage implements StringableProperty
{
public readonly string $path;
protected static string $defaultPath = '/images/default.png';
public function __construct(string $path = '')
{
$this->path = $path ?: static::$defaultPath;
}
public function getUrl(): string
{
return "https://example.com{$this->path}";
}
public function __toString(): string
{
return $this->path;
}
}
class User extends Base
{
#[Column] public int $id;
#[Column] public UserImage $image;
}
User::find(1)->image->getUrl();
class Vehicle extends Base
{
#[Column]
public int $id;
#[Column]
public int $owner_id;
#[BelongsTo]
public Owner $owner;
}
class Owner extends Base
{
#[Column]
public int $id;
#[Column]
public string $name;
#[HasMany]
#[ArrayShape([Vehicle::class])]
public array $vehicles;
}
$vehicle = new Vehicle;
$vehicle->owner = new Owner();
$owner = new Owner();
$owner->vehicles = [new Vehicle()];
$owner->vehicles[0]->make = 'BMW';
$owner->save(); // or $owner->vehicles[0]->save();
class Vehicle extends Base
{
#[Column]
#[Required]
public int $id;
#[Column]
#[Length(max: 30, message: 'Make is too long')]
public string $make;
#[Column]
#[Length(min: 10, max: 30)]
public string $model;
}
use Gforces\ActiveRecord\Base;
use Gforces\ActiveRecord\Connection;
Base::setConnection(new Connection($dsn, $username, $password));
use Gforces\ActiveRecord\Connection);
Vehicle::setConnection(new Connection($dsn, $username, $password));
User::findAll(['name' => 'Phil', 'male' => Sex::male, 'disabled' => false]);
User::findAll("`name` = 'Phil' AND `sex` = 'male' AND `disabled` = 0");
User::findAll(['name' => 'Phil', 'male' => [Sex::male, Sex::female], 'diabled' => null]);
User::findAll("`name` = 'Phil' AND `sex` IN ('male', 'female') AND `disabled` IS NULL");
use \Gforces\ActiveRecord\PropertyExpression;
User::findAll([
'name' => PropertyExpression::eq('Phil'), // `name` = 'Phil'
'male' => PropertyExpression::ne([Sex::male, Sex::female]), // NOT IN
'diabled' => PropertyExpression::ne(null), // IS NOT NULL
'age' => PropertyExpression::gt(21), // `age` > 21
'weight' => PropertyExpression::le(50), // `weight` <= 50
'verified' => PropertyExpression::ge(new DateTime('-2 week')),
]);
use function \Gforces\ActiveRecord\PropertyExpressions\eq;
use function \Gforces\ActiveRecord\PropertyExpressions\ne;
use function \Gforces\ActiveRecord\PropertyExpressions\gt;
use function \Gforces\ActiveRecord\PropertyExpressions\le;
use function \Gforces\ActiveRecord\PropertyExpressions\ge;
User::findAll([
'name' => eq('Phil'), // `name` = 'Phil'
'male' => ne([Sex::male, Sex::female]), // NOT IN
'diabled' => ne(null), // IS NOT NULL
'age' => ge(21), // `age` >= 21
'weight' => le(50), // `weight` <= 50
'verified' => gt(new DateTime('-2 week')),
]);
use Gforces\ActiveRecord\Expression;
use Gforces\ActiveRecord\Expressions\Simple;
use function \Gforces\ActiveRecord\PropertyExpressions\gt;
use function \Gforces\ActiveRecord\PropertyExpressions\le;
User::findAll([
'name' => 'Phil',
Expression::or([
'age' => gt(21),
'weight' => le(50),
]),
'1 = 1',
]);
use Gforces\ActiveRecord\Base;
class Vehicle extends Base
{
protected static bool $keepAttributeChanges = true;
#[Column]
public string $make;
public function isMakeChanged(): bool
{
return $this->isAttributeChanged('make');
}
}
$vehicle = Vehicle::find($id);
$vehicle->save(); // UPDATE query is not executed
$vehicle->isMakeChanged(); // false
$vehicle->make = 'VW';
$vehicle->isMakeChanged(); // true
$vehicle->save() // UPDATE query executed