Page tree
Skip to end of metadata
Go to start of metadata

Původní databázová vrstva založená na heterogenních knihovnách pro každý DB engine byla nahrazena PDO (http://cz1.php.net/pdo), viz třída Vivo\DB a její potomci. Zároveň došlo ke změně filosofie práce s databázovými spojeními, nově se DB spojení definují stejně jako všechny objekty pomocí YAMLu - každé databázové spojení je samostatný objekt použitelný pomocí DI, tímto způsobem je řešena podpora napojení na víc databází.

Definice

(config/module.yml resp. config/global.yml):

/config/global.yml
objects:
    db:	# DB spojení - objekt for DI
       class: Vivo\DB\MySQL
       arguments:
            dsn: host=localhost;dbname=vivo-cms;charset=utf8  # DSN pro daný PDO engine bez prefixu (doplní se automaticky) 
            user: developer
            password: helloworld
            options: # nepovinné; další nastavení pro PDO/adaptér - konstanty odpovídající konstantám PDO (ala ATTR_SOMETHING) se automaticky nahradí za patřičné hodnoty konstant
                ATTR_STRINGIFY_FETCHES: false
                ATTR_SOME_OTHER_PDO_PARAM: some_value
                initial_queries: # SQL příkazy, které se provedou ihned po navázání spojení (např. nastavení databázové session)
                    - "SOME SQL COMMAND AFTER ADAPTER INIT"
            connectionName: myconnection # nepovinné; člověku čitelný název spojení použitý ve výstupu profileru

 

Použití

Objekt využívající 2 DB spojení
class Order extends Object {
    
    /**
     * @var DB\Oracle\Legacy
     */
    private $db_legacy;

   /**
    * @var DB\Oracle
    */
   private $db;

   /**
    * @param DB $db
    * @param DB\Oracle\Legacy $db_legacy
    */
   public function __construct(DB $db, DB\Oracle\Legacy $db_legacy)
    {
       $this->db = $db;
        $this->db_legacy = $db_legacy;
    } 
}

Nové metody API

Vivo\DB::exec()
/**
 * Vykoná SQL příkaz, vrátí počet ovlivněných řádků
 *
 * @param string $query
 * @param array $parameters [optional]
 * @throws DB\Exception
 * @return int
 */
function exec($query, array $parameters = [])
 
// příklad
$db->exec('INSERT INTO table (id, name, arg) VALUES (?, ?, ?)', [1, 'Peter', 21]);
$db->exec('INSERT INTO table (id, name, arg) VALUES (:id, :name, :arg)', ['id' => 1, 'name' => 'Peter', 'arg' => 21]);
Vivo\DB::insert()
/**
 * Vloží řádek do DB 
 *
 * @param string $table
 * @param array $row
 * @return bool
 */
function insert($table, array $row)
 
// příklad
$db->insert('some_table', ['column1' => 'Value 1', 'column2' => 'Value 2']);
Vivo\DB::insertMultiple()
/**
 * Vloží víc řádků do DB
 *
 * @param string $table
 * @param array $rows
 * @return int
 * @throws \Exception
 */
function insertMultiple($table, array $rows)
 
// příklad
$db->insertMultiple(
  'some_table', 
  [
    ['column1' => 'Value 1.1', 'column2' => 'Value 1.2'],
	['column1' => 'Value 2.1', 'column2' => 'Value 2.2']
  ]
);
Vivo\DB::update()
/**
 * Update řádku/řádků 
 *
 * @param string $table
 * @param array $row
 * @param null|string|array $where
 * @param array $whereData [optional]
 * @return int
 */
function update($table, array $row, $where, array $whereData = [])
 
// příklad
$db->update('some_table', ['column1' => 'Value 1', 'column2' => 'Value 2'], ['where_column1' => 'some value', 'where_column2' => 'value2']);
$db->update('some_table', ['column1' => 'Value 1', 'column2' => 'Value 2'], 'where_column1 = ? AND where_column2 = ?', ['some value', 'value2']);
$db->update('some_table', ['column1' => 'Value 1', 'column2' => 'Value 2'], 'where_column1 = :col1 AND where_column2 = :col2', ['col1' => 'some value', 'col2' => 'value2']);
Vivo\DB::delete()
/**
 * Smaže řádek/řádky
 *
 * @param string $table
 * @param null|string|array $where
 * @param string|array $whereData [optional]
 * @return int
 */
function delete($table, $where, $whereData = [])
 
// příklad
$db->delete('some_table', ['where_column1' => 'some value', 'where_column2' => 'value2']);
$db->delete('some_table', 'where_column1 = ? AND where_column2 = ?', ['some value', 'value2']);
$db->delete('some_table', 'where_column1 = :col1 AND where_column2 = :col2', ['col1' => 'some value', 'col2' => 'value2']);

 

Kompletní přehled API naleznete zde.

 

 

  • No labels