Skip to content

Query Builder in ZubZet

Since version 1.0.0, ZubZet includes a built-in Query Builder.
It is based on CakePHP\Database.

The Query Builder allows you to build SQL queries programmatically in a safe and structured way, directly from your models.


How it works

Inside a model, you can now use helper methods like select, update, delete, and insert. These methods internally delegate to the CakePHP Query Builder.

Example methods inside a model:

public function select($fields = [], $table = [], array $types = []) {
    return $this->getQueryBuilder()->selectQuery($fields, $table, $types);
}

public function update($table = null, array $values = [], array $conditions = [], array $types = []) {
    return $this->getQueryBuilder()->updateQuery($table, $values, $conditions, $types);
}

public function delete(string $table, array $conditions = [], array $types = []) {
    return $this->getQueryBuilder()->deleteQuery($table, $conditions, $types);
}

public function insert(string $table = null, array $values = [], array $types = []) {
    return $this->getQueryBuilder()->insertQuery($table, $values, $types);
}

public function getQueryBuilder() {
    return $this->z_db->cakePHPDatabase;
}

Executing Queries

Once you have built a query, you can execute it with the exec method:

$query = $this->select(...);

$this->exec($query);


Examples

Select Example

$query = $this->select(['id', 'name'], 'users') // Build a SELECT query on table "users", fetching only the columns "id" and "name"
              ->where(['id' => 42]);            // Add a WHERE condition: only rows where "id" equals 42

$result = $this->exec($query);                  // Execute the query and return the result

This will execute a query equivalent to:

SELECT id, name FROM users WHERE id = 42;

Insert Example

$query = $this->insert('users', [               // Build an INSERT query for the "users" table
    'name'  => 'John Doe',                      // Set column "name" to "John Doe"
    'email' => '[email protected]'               // Set column "email" to "[email protected]"
]);

$this->exec($query);                            // Execute the query to insert the new record

Equivalent SQL:

INSERT INTO users (name, email) VALUES ('John Doe', '[email protected]');

Update Example

$query = $this->update('users', [               // Build an UPDATE query on the "users" table
    'email' => '[email protected]'                // Set column "email" to "[email protected]"
])->where(['id' => 42]);                        // Add WHERE condition: only update the row where "id" equals 42

$this->exec($query);                            // Execute the query to apply the update

Equivalent SQL:

UPDATE users SET email = '[email protected]' WHERE id = 42;

Delete Example

$query = $this->delete("users")                 // Build a DELETE query on the "users" table
            ->where(["id" => 42]);              // Add WHERE condition: only delete the row where "id" equals 42

$this->exec($query);                            // Execute the query to remove the record

Equivalent SQL:

DELETE FROM users WHERE id = 42;

Summary

  • All query methods (select, insert, update, delete) return a CakePHP Query object.
  • Queries are executed via $this->exec($query).

More Information

The Query Builder in ZubZet is built on top of CakePHP\Database. You can use all features provided by CakePHP’s query builder.

Important:

  • There is no direct database connection handled by CakePHP itself inside ZubZet.
  • This means that simply creating a query with $this->getQueryBuilder() will not execute it.
  • You must explicitly run the query via:

    $this->exec($query);
    
  • The CakePHP Query Builder instance can always be accessed with:

    $this->getQueryBuilder();
    

This ensures that all queries you build are properly executed through ZubZet’s database layer.