, (*1)
What is Flunorette?
Flunorette, (*2)
-
is a database layer simplifying work with tables, relations and CRUD operations., (*3)
-
is heavily based on Nette Database (Table) - NDB(T) and uses modified FluentPDO as SQL builder., (*4)
-
is derived directly from NDB(T)2.0 thus it's like on 95% compatible with it[1], (*5)
-
uses the same syntax/API as NDBT2.0 but takes faster code from NDBT2.1.
The main reason i decided to create Flunorette was that NDBT is superior for simple websites like blogs but with complex web apps you sooner or later hit the wall. E.g. as soon as you need create queries with conditions inside JOIN clauses or any other advance queries there is no way how to achieve it with NDBT., (*6)
[1]: Flunorette has a replacer that can help you with replacing NDB(T)2.0., (*7)
Download
Via composer composer require icaine/flunorette '~1.0'
or via github., (*8)
Documentation
Can be found on wiki pages., (*9)
Examples
Some examples are on wiki pages and even more examples can be seen in tests., (*10)
Change log
1.6.2014 - Some classes moved to new namespaces (towards PSR-4). To migrate from 0.9 to 1.0 use:, (*11)
//BC part
//https://github.com/icaine/RenamedClassLoader
$rcLoader = new iCaine\RenamedClassLoader([
'Flunorette\\NetteDatabaseReplacer' => 'Flunorette\\Bridges\\Nette\\NetteDatabaseReplacer',
'Flunorette\\Hydrator' => 'Flunorette\\Hydrators\\Hydrator',
'Flunorette\\HydratorSelectionDefault' => 'Flunorette\\Hydrators\\HydratorSelection',
'Flunorette\\HydratorArrayHash' => 'Flunorette\\Hydrators\\HydratorArrayHash',
'Flunorette\\HydratorResult' => 'Flunorette\\Hydrators\\HydratorField',
'Flunorette\\ActiveRow' => 'Flunorette\\Selections\\ActiveRow',
'Flunorette\\Selection' => 'Flunorette\\Selections\\Selection',
'Flunorette\\GroupedSelection' => 'Flunorette\\Selections\\GroupedSelection',
'Flunorette\\ISelectionFactory' => 'Flunorette\\Selections\\ISelectionFactory',
'Flunorette\\SelectionFactory' => 'Flunorette\\Selections\\SelectionFactory',
'Flunorette\\DeleteQuery' => 'Flunorette\\Queries\\DeleteQuery',
'Flunorette\\InsertQuery' => 'Flunorette\\Queries\\InsertQuery',
'Flunorette\\JoinableQuery' => 'Flunorette\\Queries\\JoinableQuery',
'Flunorette\\Query' => 'Flunorette\\Queries\\Query',
'Flunorette\\QueryBuilder' => 'Flunorette\\Queries\\QueryBuilder',
'Flunorette\\QueryContext' => 'Flunorette\\Queries\\QueryContext',
'Flunorette\\SelectQuery' => 'Flunorette\\Queries\\SelectQuery',
'Flunorette\\UpdateQuery' => 'Flunorette\\Queries\\UpdateQuery',
'Flunorette\\IReflection' => 'Flunorette\\Reflections\\IReflection',
'Flunorette\\ConventionalReflection' => 'Flunorette\\Reflections\\ConventionalReflection',
'Flunorette\\DiscoveredReflection' => 'Flunorette\\Reflections\\DiscoveredReflection',
'Flunorette\\ReflectionException' => 'Flunorette\\Reflections\\ReflectionException',
]);
$rcLoader->onClassLoaded[] = function ($old, $new) {
trigger_error($old, E_USER_DEPRECATED);
};
$rcLoader->register();
//If you are using the replacer
//Flunorette\NetteDatabaseReplacer::replace();
//end BC part