Joomla! 2.5 Database Abstraction

Preview:

DESCRIPTION

Dutch presentation for the JoomlaDays 2012 in The Netherlands; presentation given by Yireo-founder Jisse Reitsma

Citation preview

april 2012 Joomla! Database Abstractie

Joomla! database abstractie

april 2012 Joomla! Database Abstractie

Jisse Reitsma● Mede-oprichter en developer van Yireo

MageBridge, Vm2Mage, SimpleLists

Dynamic404, SSL Redirect, ...

● ProgrammeurJoomla!, Magento, PHP, Java, Android

● Freelance trainerJoomla! development, Magento development

april 2012 Joomla! Database Abstractie

Deze presentatie● Deel 1: Over database abstractie● Deel 2: Gebruik van JDatabase● Deel 3: Praktisch met JDatabaseQuery

april 2012 Joomla! Database Abstractie

(vragen?)

april 2012 Joomla! Database Abstractie

Deel 1:Over database abstractie

april 2012 Joomla! Database Abstractie

Database abstractie (1)● Meerdere databases

– MySQL, MSSQL, Oracle, PostgreSQL

– MS Access, SQLite, Sybase

● Gebruik SQL zo algemeen mogelijk

april 2012 Joomla! Database Abstractie

Database abstractie (2)● Joomla! biedt momenteel al support voor:

– MySQL (mysql, mysqli)

– Microsoft SQL (sqlsrv)

– Microsoft SQL Azure (sqlzure)

april 2012 Joomla! Database Abstractie

Database Abstraction Layer (DAL)● AdoDb● Zend_Db● PDO

april 2012 Joomla! Database Abstractie

#__● Database table prefix● Tijdens Joomla! 2.5 wordt prefix gegeneerd

april 2012 Joomla! Database Abstractie

JTable● Onderdeel van MVC-architectuur● Gekoppeld aan JModel (model)● “Interface” voor specifieke database tabel● Nieuw in Joomla! 2.5: JTableNested

april 2012 Joomla! Database Abstractie

JDatabase● Aanbevolen:

$db = JFactory::getDBO(); 

● Niet doen:

$db = JDatabase::getInstance();

april 2012 Joomla! Database Abstractie

JDatabaseQuery● Nieuw in Joomla! 2.5● OOP-manier om query in elkaar te zetten● Geen directe SQL-statements meer

april 2012 Joomla! Database Abstractie

(vragen?)

april 2012 Joomla! Database Abstractie

Deel 2:Gebruik van JDatabase

april 2012 Joomla! Database Abstractie

Gebruik in Joomla! 1.5 (1)● Ophalen van $db en het escapen van $name

$db = JFactory::getDBO();

$name = $db­>Quote($name);

april 2012 Joomla! Database Abstractie

Gebruik in Joomla! 1.5 (2)● Een query als string opbouwen en klaarzetten

$query = “SELECT * FROM #__users”    . “ WHERE `name`=”.$name; 

$db­>setQuery($query);

april 2012 Joomla! Database Abstractie

Gebruik in Joomla! 2.5 (1)● Een lege query beginnen

$db = JFactory::getDBO();

$query = $db­>getQuery(true);

● Of op een andere manier

$query = new JDatabaseQuery();

april 2012 Joomla! Database Abstractie

Gebruik in Joomla! 2.5 (2)● De query via methodes in elkaar

$query­>select('*');

$query­>from('#__users');

$query­>where('name='.$name);

$db­>setQuery($query);

april 2012 Joomla! Database Abstractie

JDatabase methoden– setQuery()

– query()

– loadAssocList()

– loadResult()

– getErrorMsg()

– Quote()

april 2012 Joomla! Database Abstractie

JDatabaseQuery methoden– select(), insert(), delete(), update()

– from(), where()

– quote()

– leftJoin(), rightJoin(),

innerJoin(), outerJoin()

– order(), having(), group()

april 2012 Joomla! Database Abstractie

JTable methoden– load()

– delete()

– bind() + check() + store() = save()

– getFields()

– getKeyName()

april 2012 Joomla! Database Abstractie

(vragen?)

april 2012 Joomla! Database Abstractie

Deel 3:Praktisch met JDatabaseQuery

april 2012 Joomla! Database Abstractie

JOINs maken (1)● Verschillende join-mogelijkheden

– innerJoin($join) => join('INNER', $join)

– outerJoin($join) => join('OUTER', $join)

– leftJoin($join) => join('LEFT', $join)

– rightJoin($join) => join('RIGHT', $join)

april 2012 Joomla! Database Abstractie

JOINs maken (2)● $query = $db­>getQuery(true);

● $query­>select('count(*)');

● $query­>from('#__xyz_items AS i');

● $query­>leftJoin('#__xyz_categories AS c ON i.category_id = c.id');

april 2012 Joomla! Database Abstractie

Nested sets● Klasse JTableNested

– Niet voor JOINs, maar node-structuren

– JTableCategory, JTableMenu, JTableAsset● jimport('joomla.database.tablenested');

april 2012 Joomla! Database Abstractie

Andere databases benaderen● $options = array(  'driver' => 'mysqli',  'host' => 'localhost',  'user' => 'foo', 'password' => 'bar',  'database' => 'wordpress',  'prefix' => 'wp_',);

● $db = JDatabase::getInstance($options);

april 2012 Joomla! Database Abstractie

Een query debuggen● $query­>select('*')­>from('#__content');

● echo $query; // __toString();

april 2012 Joomla! Database Abstractie

(vragen?)