1. Go to this page and download the library: Download quellabs/canvas-objectquel 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/ */
quellabs / canvas-objectquel example snippets
// The EntityManager is automatically available in your Canvas application
use Quellabs\Canvas\Controllers\BaseController;
use Quellabs\Canvas\Annotations\Route;
class ProductController extends BaseController {
/**
* @Route('/')
*/
public function index() {
$products = $this->em()->findBy(ProductEntity::class, [
'active' => true
]);
return $this->render('products.tpl', compact('products'));
}
}
namespace App\Controllers;
use Quellabs\ObjectQuel\EntityManager;
use App\Entity\ProductEntity;
use Quellabs\Canvas\Controllers\BaseController;
use Quellabs\Canvas\Annotations\Route;
class ProductController extends BaseController {
/**
* @Route('/products/create', methods={['POST']})
*/
public function create() {
$product = new ProductEntity();
$product->setName('New Product');
$product->setPrice(29.99);
$this->em()->persist($product);
$this->em()->flush();
return $this->redirect('/products');
}
/**
* @Route('/products')
*/
public function index() {
$products = $this->em()->executeQuery("
range of p is App\\Entity\\ProductEntity
retrieve (p) where p.active = true
sort by p.name asc
");
return $this->render('products.index', compact('products'));
}
}
use Quellabs\Canvas\Controllers\BaseController;
use Quellabs\Canvas\Annotations\Route;
// In a Canvas controller with DI
class OrderController extends BaseController {
/**
* @Route('/orders/{id}', methods={['GET']})
*/
public function show(int $id) {
$order = $this->em()->find(OrderEntity::class, $id);
if (!$order) {
return $this->notFound();
}
return $this->render('orders.show.tpl', compact('order'));
}
/**
* @Route('/orders/{id}', methods={['PUT', 'PATCH']})
*/
public function update(int $id, array $data) {
$order = $this->em()->find(OrderEntity::class, $id);
$order->setStatus($data['status']);
$this->em()->persist($order);
$this->em()->flush();
return $this->json(['success' => true]);
}
}
// Using ObjectQuel query language
public function getRecentOrdersWithCustomers() {
return $this->em()->executeQuery("
range of o is App\\Entity\\OrderEntity
range of c is App\\Entity\\CustomerEntity via o.customer
retrieve (o, c.name)
where o.createdAt > :since
sort by o.createdAt desc
window 0 using window_size 10
", [
'since' => new DateTime('-30 days')
]);
}
// Create a custom repository
use Quellabs\ObjectQuel\Repository;
class ProductRepository extends Repository {
public function __construct(EntityManager $entityManager) {
parent::__construct($entityManager, ProductEntity::class);
}
/**
* Find products below a certain price
* @param float $maxPrice Maximum price threshold
* @return array<ProductEntity> Matching products
*/
public function findFeaturedProducts(): QuelResult {
return $this->em()->executeQuery("
range of p is App\\Entity\\ProductEntity
retrieve (p) where p.featured = true
sort by p.sortOrder asc
");
}
}
bash
php bin/sculpt make:entity
bash
php bin/sculpt make:migrations
bash
php bin/sculpt quel:migrate
bash
# Roll back the last migration
php bin/sculpt quel:migrate --rollback
# Roll back multiple migrations
php bin/sculpt quel:migrate --rollback --steps=3
# Get help with migration commands
php bin/sculpt help quel:migrate
bash
php bin/sculpt make:blank-migration <Name>
bash
# Generate migrations for your new entity
php bin/sculpt make:migrations
# Apply the migrations to your database
php bin/sculpt quel:migrate
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.