php.dbquery
With this library you can update multiple interrelated tables at the same time without writing separated SQL statements.
Installation
Download the project:
git clone https://github.com/soloproyectos/php.dbquery
and copy the classes
folder in your preferred location (optionally, rename it). Finally, copy and paste the following PHP code:
require_once "< YOUR PREFERRED LOCATION >/classes/autoload.php";
use com\soloproyectos\common\db\DbConnector;
use com\soloproyectos\common\db\DbTable;
And that's all. You are ready to use this library.
Important methods
DbTable::get($colName)
: Gets a column value
DbTable::set($colName, $colValue)
: Sets a column value
DbTable::insert()
: Inserts a new record
DbTable::update()
: Updates a record
DbTable::delete()
: Deletes a record
DbTable::serOrder($order)
: sets an order
DbTable::addFilter($filter)
: adds a filter
DbTable::refresh()
: refreshes the columns
Introduction
Let's say that we have a content
table and several tables that depend on it. That is:
In this scenario, we can update (or eventually insert) records in the tables content
, image
, video
and file
at the same time, as if it were a single table. In the following example we are updating a record of the table content
and updating (or inserting) the corresponding records of the tables image
, video
and file
:
// connects to the database
$db = new DbConnector("database", "username", "password");
// updates the record "content.id = 101"
$t = new DbTable($db, "content", 101);
$t->set("description", "Record description...");
$t->set("image.path", "/path/to/image.jpg");
$t->set("video.path", "/path/to/video.mp4");
$t->set("file.path", "/path/to/file.pdf");
$t->update();
Let's consider a more complex example, in which the table image
depends on the table video
which in turn depends on the table content
. That is:
In the following example, the expressión image[video.image_id].path
means that the table image
depends on the table video
through the column image_id
:
// connects to the database
$db = new DbConnector("database", "username", "password");
// updates the record "content.id = 101"
$t = new DbTable($db, "content", 101);
$t->set("description", "Record description...");
$t->set("video.path", "/path/to/video.mp4");
$t->set("image[video.image_id].path", "/path/to/image.jpg");
$t->update();
Assumptions
By default, DbTable
assumes that each table has a primary key called id
(although this name can be changed in the constructor). Also it assumes that table1
depends on table0
through the column table1_id
. So these expressions are equivalents:
// these three commands are equivalents
echo $t->get("image.path");
echo $t->get("image[image_id].path");
echo $t->get("image[id = image_id].path");
// these three commands are equivalents as well
echo $t->get("image[video.image_id].path");
echo $t->get("image[id = video.image_id].path");
echo $t->get("image[id = video[id = video_id].image_id].path");
The general format to access a column of a dependent table is as follows:
table1[col0 = col1].column
In case of col0
is id
and col1
is table1_id
we can write:
table1.column
Some other valids expressions are:
table1[col1].column
table1[col0 = col1].column
table1[col0 = table2.col1].column
table1[col0 = table2[col2 = col3].col4].column
etc...
Examples
See more examples at test.php