joomla! 2.5 database abstraction
Post on 17-Jan-2015
6.810 Views
Preview:
DESCRIPTION
TRANSCRIPT
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?)
top related