1. Go to this page and download the library: Download versaorm/versaorm-php 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/ */
// ❌ SQL Manual (PDO) - Más código, más errores
$stmt = $pdo->prepare("INSERT INTO users (name,email) VALUES (?,?)");
$stmt->execute(['Juan Pérez','[email protected]']);
$id = $pdo->lastInsertId();
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
$userData = $stmt->fetch(PDO::FETCH_ASSOC);
// ✅ VersaORM - Simple y seguro
$user = VersaModel::dispense('users');
$user->name = 'Juan Pérez';
$user->email = '[email protected]';
$user->store(); // ID asignado automáticamente
// Leer, actualizar y eliminar
$user = VersaModel::load('users', $user->id);
$user->email = '[email protected]';
$user->store(); // Actualización automática
$user->trash(); // Eliminación segura
// ❌ SQL Manual - Propenso a errores de sintaxis
$sql = "SELECT * FROM users WHERE status = ? AND age >= ? AND role IN (?,?) ORDER BY created_at DESC LIMIT 10";
$stmt = $pdo->prepare($sql);
$stmt->execute(['active', 18, 'admin', 'editor']);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
// ✅ VersaORM - Fluido y legible
$activeUsers = $orm->table('users')
->where('status', '=', 'active')
->where('age', '>=', 18)
->whereIn('role', ['admin', 'editor'])
->orderBy('created_at', 'desc')
->limit(10)
->getAll();
// Joins complejos simplificados
$userStats = $orm->table('users')
->select(['users.name', 'COUNT(posts.id) as total_posts'])
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->where('users.status', '=', 'active')
->groupBy(['users.id', 'users.name'])
->having('total_posts', '>', 5)
->getAll();
// Operaciones masivas seguras
->where('stock', '>', 0)
->update(['status' => 'available']);
// Inspección de SQL generado (v1.8.6)
$sql = $orm->table('users')->where('id', '>', 10)->toSql();
$params = $orm->table('users')->where('id', '>', 10)->getBindings();
// $sql = "SELECT * FROM users WHERE id > ?"
// $params = [10]
$rows = $orm->table('orders AS o')
->join('invoices AS i')
->on('o.id','=','i.order_id')
->on('o.company_id','=','i.company_id')
->where('i.status','=','paid')
->getAll();
// Con mezcla AND / OR
$sessions = $orm->table('sessions AS s')
->join('users AS u')
->on('s.user_id','=','u.id')
->on('s.admin_id','=','u.id','OR')
->getAll();
// UPSERT: Insertar si no existe, actualizar si existe
$result = $orm->table('products')->upsert(
[
'sku' => 'LAPTOP-001',
'name' => 'MacBook Pro 16"',
'price' => 2499.99,
'stock' => 25
],
['sku'], // Claves únicas para detectar duplicados
['name', 'price', 'stock'] // Campos a actualizar si existe
);
// Método save() inteligente - detecta automáticamente INSERT vs UPDATE
$user = $orm->table('users')->save([
'email' => '[email protected]',
'name' => 'John Updated',
'role' => 'admin'
], ['email']); // Si existe el email, actualiza; si no, inserta
// insertOrUpdate() - alias intuitivo para upsert
$setting = $orm->table('settings')->insertOrUpdate([
'key' => 'app_version',
'value' => '2.1.0',
'updated_at' => date('Y-m-d H:i:s')
], ['key']);
// replaceInto() - reemplazo completo (solo MySQL)
$backup = $orm->table('user_backups')->replaceInto([
'user_id' => 123,
'backup_data' => json_encode($userData),
'created_at' => date('Y-m-d H:i:s')
]);