29
april 2012 Joomla! Database Abstractie Joomla! database abstractie

Joomla! 2.5 Database Abstraction

  • Upload
    yireo

  • View
    6.810

  • Download
    3

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

Joomla! database abstractie

Page 2: Joomla! 2.5 Database Abstraction

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

Page 3: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

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

Page 4: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

(vragen?)

Page 5: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

Deel 1:Over database abstractie

Page 6: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

Database abstractie (1)● Meerdere databases

– MySQL, MSSQL, Oracle, PostgreSQL

– MS Access, SQLite, Sybase

● Gebruik SQL zo algemeen mogelijk

Page 7: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

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

– MySQL (mysql, mysqli)

– Microsoft SQL (sqlsrv)

– Microsoft SQL Azure (sqlzure)

Page 8: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

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

Page 9: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

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

Page 10: Joomla! 2.5 Database Abstraction

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

Page 11: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

JDatabase● Aanbevolen:

$db = JFactory::getDBO(); 

● Niet doen:

$db = JDatabase::getInstance();

Page 12: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

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

Page 13: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

(vragen?)

Page 14: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

Deel 2:Gebruik van JDatabase

Page 15: Joomla! 2.5 Database Abstraction

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);

Page 16: Joomla! 2.5 Database Abstraction

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);

Page 17: Joomla! 2.5 Database Abstraction

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();

Page 18: Joomla! 2.5 Database Abstraction

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);

Page 19: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

JDatabase methoden– setQuery()

– query()

– loadAssocList()

– loadResult()

– getErrorMsg()

– Quote()

Page 20: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

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

– from(), where()

– quote()

– leftJoin(), rightJoin(),

innerJoin(), outerJoin()

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

Page 21: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

JTable methoden– load()

– delete()

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

– getFields()

– getKeyName()

Page 22: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

(vragen?)

Page 23: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

Deel 3:Praktisch met JDatabaseQuery

Page 24: Joomla! 2.5 Database Abstraction

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)

Page 25: Joomla! 2.5 Database Abstraction

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');

Page 26: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

Nested sets● Klasse JTableNested

– Niet voor JOINs, maar node-structuren

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

Page 27: Joomla! 2.5 Database Abstraction

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);

Page 28: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

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

● echo $query; // __toString();

Page 29: Joomla! 2.5 Database Abstraction

april 2012 Joomla! Database Abstractie

(vragen?)