User Tools

Site Tools


tina4:database

Database in Tina4

Connecting to a Database

There are 3 database engines currently supported, we are happy to add more if required but for now they are:

The database connection is established in a global variable called $DBA in the index.php file for convenience, you could put it anywhere as long as it is global and required before any database functionality is required. For testing purpose, you can use the SQLite database type below.

Query a Database in Tina4

Here's a quick way to query a database in Tina4.

Create a class in a new file in the app directory I.e. MyClass.php

<?php 
 
class LegacyHelper extends \Tina4\Data 
{
    public function getEvent($variable)
    {
        $event = $this-$DBA->select("*") 
                           ->from("table_name")
                           ->where("column_name = {$variable}")
                           ->exclude("id")
                           });
        //$DBA is made available because we extended\Tina4\Data
 
        return $event;
    }
}

Let's break down

  1. We're extending the \Tina4\Data class which already has access to the database
  2. Note we've included \Tina4 in front of the class name (so we don't need to declare the Tina4 namespace in our file)
  3. From here we can use the built-in Tina4 functions to create a query (see \Tina4\SQL)

How can the select method be used? Have a look at the select function from \Tina4\Database

public function select($fields = "*", $limit = 10, $offset = 0, 
$hasOne = [], $hasMany = [])

Fields

  • Specify “*” or multiple fields.
 ->select("*") 
 ->select("name,id") 
  • limit the records returned (default 10),
 ->select("name,id",1) 
  • specify an offset (null based) so 3 would return from results from the 4th record,
 ->select("name,id",1,3) 

Using hasOne / hasMany

This is a new feature on the 2.0.0 Dev Branch. You can only use it on one of your related tables at a time at present. I.e. using hasMany/hasOne on both the Users and Privileges ORM object will result in a circular reference. This issue will be fixed as this version of Tina4 heads for general release.

hasMany.php
<?php
class Users extends \Tina4\ORM
{
    public $tableName="users"; //table name
    public $primaryKey="user_id"; //set for primary key
 
    // public $hasMany = [["privileges" => "privelege_id"]];
}
tina4/database.txt · Last modified: 2021/05/28 09:29 by matthew