1. Go to this page and download the library: Download wscore/decaorm 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/ */
wscore / decaorm example snippets
use WScore\DecaORM\Attribute\Column;
use WScore\DecaORM\Attribute\GeneratedValue;
use WScore\DecaORM\Attribute\HasMany;
use WScore\DecaORM\Attribute\Id;
use WScore\DecaORM\Attribute\Repository;
use WScore\DecaORM\Attribute\Table;
use WScore\DecaORM\Contracts\EntityInterface;
use WScore\DecaORM\Trait\EntityTrait;
#[Table(name: 'users')]
#[Repository(UserRepository::class)]
class User implements EntityInterface
{
use EntityTrait;
#[Id]
#[GeneratedValue]
#[Column(name: 'user_id')]
private ?int $id = null;
#[Column(name: 'name')]
private string $name = '';
public function getId(): int
{
return (int) $this->id;
}
public function getName(): string
{
return $this->name;
}
}
use PDO;
use WScore\DecaORM\AbstractRepository;
use WScore\DecaORM\AttributeHydrator;
/**
* @extends AbstractRepository<User>
*/
class UserRepository extends AbstractRepository
{
public function __construct(OrmManager $manager)
{
$this->setUpRepository($manager, null, User::class);
}
}
$pdo = new PDO('mysql:host=localhost;dbname=test', 'user', 'pass');
$manager = OrmManager::initialize($container);
$userRepo = new UserRepository($manager);
// Create
$user = new User();
$user->fill(['name' => 'Deca Taro']);
$user->save(); // INSERT; ID is auto-generated
echo $user->getId();
// Read
$user = $userRepo->findById(1);
if ($user) {
echo $user->getName();
}
// Update
$user->setName('Deca Jiro'); // or setRaw('name', 'Deca Jiro')
$user->save(); // UPDATE (ID present)
// Delete
$user->delete();
class User implements EntityInterface
{
// One-to-many: targetEntity = related class, mappedBy = property name on the other side
#[HasMany(targetEntity: Post::class, mappedBy: 'user')]
private ?array $posts = null;
public function getPosts(): EntityCollection
{
return $this->load('posts');
}
/**
* @param EntityCollection<Post>|null $posts
*/
public function setPosts(?EntityCollection $posts): void
{
$this->associate('posts', $posts);
}
public function addPost(Post $post): void
{
$this->addHasMany('posts', $post);
}
public function removePost(Post $post): void
{
$this->removeHasMany('posts', $post);
}
}
use WScore\DecaORM\Attribute\BelongsTo;
use WScore\DecaORM\Attribute\Column;
use WScore\DecaORM\Attribute\GeneratedValue;
use WScore\DecaORM\Attribute\Id;
use WScore\DecaORM\Attribute\Repository;
use WScore\DecaORM\Attribute\Table;
use WScore\DecaORM\Contracts\EntityInterface;
use WScore\DecaORM\Trait\EntityTrait;
#[Table(name: 'posts')]
#[Repository(PostRepository::class)]
class Post implements EntityInterface
{
use EntityTrait;
#[Id]
#[GeneratedValue]
#[Column(name: 'post_id')]
private ?int $id = null;
#[Column(name: 'user_id')]
private ?int $user_id = null; // FK column for User
#[Column(name: 'title')]
private string $title = '';
// Many-to-one: foreignKey = FK property, inversedBy = property on the parent
#[BelongsTo(targetEntity: User::class, foreignKey: 'user_id', inversedBy: 'posts')]
private ?User $user = null;
}
$user = $userRepo->findById(1);
$posts = $user->load('posts'); // SELECT runs here
$posts = $user->load('posts'); // Returns cached value
class User implements EntityInterface
{
/** @var EntityCollection<Role>|null */
#[ManyToMany(
targetEntity: Role::class,
joinTable: 'user_role',
foreignKey: 'user_id',
inverseForeignKey: 'role_id'
)]
private ?EntityCollection $roles = null;
public function getRoles(): EntityCollection
{
return $this->load('roles');
}
/**
* @param EntityCollection<Role>|null $roles
*/
public function setRoles(?EntityCollection $roles): void
{
$this->associate('roles', $roles);
}
}
use WScore\DecaORM\Trait\ManyToManyTrait;
class UserRepository extends AbstractRepository
{
use ManyToManyTrait;
}
$user->getRoles()->add($role1);
$user->getRoles()->add($role2);
$user->getRoles()->delEntity($role3);
$userRepo->syncManyToMany($user, 'roles');
OrmManager::transaction(function () use ($userRepo, $postRepo) {
$user = new User();
$user->setName('John Doe');
$post = new Post();
$post->setTitle('My Post');
$user->setPosts(new EntityCollection([$post], $postRepo));
$userRepo->save($user); // Parent first
$postRepo->save($post); // Then children
});
use WScore\DecaORM\OrmManager;
$manager = OrmManager::initialize($container);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.