1. Go to this page and download the library: Download eftec/pdooneorm 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/ */
eftec / pdooneorm example snippets
$stmt = $pdo->prepare("SELECT * FROM myTable WHERE name = ?");
$stmt->bindParam(1,$_POST['name'],PDO::PARAM_STR);
$stmt->execute();
$result = $stmt->get_result();
$products=[];
while($row = $result->fetch_assoc()) {
$product[]=$row;
}
$stmt->close();
ProductRepo // this class was generated with echo $pdoOne()->generateCodeClass(['Product']); or using the cli.
::where("name = ?",[$_POST['name']])
->toList();
use eftec\PdoOneORM;
// mysql
$dao=new PdoOneORM("mysql","127.0.0.1","root","abc.123","sakila","");
$conn->logLevel=3; // it is for debug purpose and it works to find problems.
$dao->connect();
// sql server 10.0.0.1\instance or (local)\instance or machinename\instance or machine (default instance)
$dao=new PdoOneORM("sqlsrv","(local)\sqlexpress","sa","abc.123","sakila","");
$conn->logLevel=3; // it is for debug purpose and it works to find problems.
$dao->connect();
// test (mockup)
$dao=new PdoOneORM("test","anyy","any","any","any","");
$dao->connect();
// oci (oracle) ez-connect. Remember that you must have installed Oracle Instant client and add it to the path.
$cs='(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = instancia1)))';
$dao=new PdoOneORM("oci",$cs,"sa","abc.123"); // oracle uses the user as the schema
$conn->logLevel=3; // it is for debug purpose and it works to find problems.
$dao->connect();
// oci (oracle) tsnnames (the environment variables TNS_ADMIN and PATH must be correctly configured), also tnsnames.ora must exists.
$cs='instancia1';
$dao=new PdoOneORM("oci",$cs,"sa","abc.123"); // oracle uses the user as the schema
$conn->logLevel=3; // it is for debug purpose and it works to find problems.
$dao->connect();
$result=$pdoOne->runRawQuery('select IdCustomer,Name from Customers where IdCustomer=?',1);
$pdo=new PdoOneORM('mysql','127.0.0.1','root','abc.123','sakila');
$pdo->connect();
$table=$pdo->generateCodeClass('Tablename','repo'); // where Tablename is the name of the table to analyze. it must exsits.
echo $clase;
class TableNameRepo extends _BasePdoOneRepo
{
// ....
}
$class = $pdoOne->generateCodeClass('Customer'); // The table Customer must exists in the database
file_put_contents('CustomerRepo.php',$clase); // and we write the code into a file.
use eftec\PdoOneORM;
use eftec\_BasePdoOneRepo;
class CustomerRepo extends _BasePdoOneRepo
{
//....
}
namespace namespace\anothernamespace;
use eftec\PdoOneORM;
use eftec\_BasePdoOneRepo;
class CustomerRepo extends _BasePdoOneRepo
{
//....
}
// converts all datetime columns into a ISO date.
$pdoOne->generateCodeClassConversions(['datetime'=>'datetime2']);
$errors=$pdoOneORM->generateAllClasses(
['messages'=>'MessageRepo','users'=>'UserRepo'] // the tables and their name of classes
,'BaseClass' // a base class.
,'namespace1\repo' // the namespaces that we will use
,'/folder/repo' // the folders where we store our classes
,false // [optional] if true the we also replace the Repo classes
,[] // [optional] Here we could add a custom relation of conversion per column.
,[] // [optional] Extra columns. We could add extra columns to our repo.
,[] // [optional] Columns to exclude.
);
var_dump($errors); // it shows any error or an empty array if success.
$allTablesTmp=$pdoOne->objectList('table',true); // we get all the tables from the current schema.
$allTables=[];
foreach($allTablesTmp as $table) {
$allTables[$table]=ucfirst($table).'Repo';
}
$errors=$pdoOne->generateAllClasses(
$allTables // tables=>repo class
,'MiniChat' // a base class.
,'eftec\minichat\repo' // the namespaces that we will use
,'/folder/repo' // the folders where we store our classes
);
echo "Errors (empty if it is ok:)";
var_dump($errors);
$pdo=new PdoOneORM('mysql','127.0.0.1','root','abc.123','sakila');
$pdo->connect();
$listing=TableNameRepo::toList(); // it will inject automatically into the Repository base class, instance of PdoOneORM.
function pdoOneORM() {
$pdo=new PdoOneORM('mysql','127.0.0.1','root','abc.123','sakila');
$pdo->connect();
}
$pdo=new PdoOneORM('mysql','127.0.0.1','root','abc.123','sakila');
$pdo->connect();
TableNameRepo::setPdoOne($pdo); // TableNameRepo is our class generated. You must inject it once per all schema.
$con1=new PdoOneORM('mysql','127.0.0.1','root','abc.123','basealpha');
$con1->connect();
$con2=new PdoOneORM('mysql','127.0.0.1','root','abc.123','basebeta');
$con2->connect();
// every base with its own connection:
Table1AlphaRepo::setPdoOne($pdo); // ✅ Table1AlphaRepo and Table2AlphaRepo will use basealpha
Table1BetaRepo::setPdoOne($pdo); // ✅ Table1BetaRepo and Table2BetaRepo will use basebeta
// however, it will not work as expected
// every base with its own connection:
Table1AlphaRepo::setPdoOne($pdo); // ✅ Table1AlphaRepo and Table2AlphaRepo will use basealpha
Table2AlphaRepo::setPdoOne($pdo); // ❌ And now, Table1AlphaRepo and Table2AlphaRepo will use basebeta
TablaParentRepo::createTable();
TablaParentRepo::createForeignKeys();
TablaParentRepo::dropTable();
TablaParentRepo::truncate();
// We don't have a method to alter a table.
$ok=TablaParentRepo::validTable(); // it returns true if the table matches with the definition stored into the clas
// select *
// from table
// inner join table2 on t1=t2
// where col=:arg
// and col2=:arg2
// group by col
// having col3=:arg3
// order by col
// limit 20,30
$results=$pdo->select('*')
->from('table')
->innerjoin('table2 on t1=t2')
->where('col=:arg and col2:=arg2',[20,30])
// it also works with ->where('col=:arg',20)->where('col2'=>30)
// it also works with ->where('col=?',20)->where('col2=?'=>30)
->group('col')
->having('col3=:arg3',400)
->order('col')
->limit('20,30')
->toList(); // end of the chain
// where obj is an associative array or an object, where the keys are the name of the columns (case sensitive)
$identity=TablaParentRepo::insert($obj);
TablaParentRepo::update($obj);
TablaParentRepo::delete($obj);
TablaParentRepo::deleteById(id);
$obj=['IdUser'=>1,'Name'='John Doe'];
UserRepo::validateModel($obj,false,['_messages']); // returns true if $obj is a valid User.
$this->select('*')->from('table')->recursive(['table1','table1.table2']);
// some operations that involves recursive
if($this->hasRecursive('table1')) {
$this->innerJoin('table1 on table.c=table1.c');
}
if($this->hasRecursive('table1.table2')) {
$this->innerJoin('table1 on table1.c=table2.c');
}
$r=$this->toList(); // recursive is resetted.
$this->select('*')->from('table')->recursive(['*']);
$this->hasRecursive('anything'); // it always returns true.
📁 folder
📁repo
📃AbstractMessageRepo.php [namespace1\repo\AbstractMessageRepo] NOT EDIT OR REFERENCE THIS FILE
📃MessageRepo.php [namespace1\repo\MessageRepo] EDITABLE
📃AbstractUserRepo.php [namespace1\repo\AbstractUserRepo] NOT EDIT OR REFERENCE THIS FILE
📃UserRepo.php [namespace1\repo\UserRepo] EDITABLE
📃BaseClass.php [namespace1\repo\BaseClass] NOT EDIT OR REFERENCE THIS FILE
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.