Db 

\nn\t3::Db() 

Zugriff auf die meist genutzten Datenbank-Operationen für Schreiben, Lesen, Löschen vereinfachen.

Overview of Methods 

\nn\t3::Db()->debug($query = NULL, $return = false); 

Debug des QueryBuilder-Statements.

Gibt den kompletten, kompilierten Query als lesbaren String aus, so wie er später in der Datenbank ausgeführt wird z.B. SELECT FROM fe_users WHERE ...

// Statement direkt im Browser ausgeben
\nn\t3::Db()->debug( $query );

// Statement als String zurückgeben, nicht automatisch ausgeben
echo \nn\t3::Db()->debug( $query, true );
Copied!
@param mixed $query
@param boolean $return
@return string

| ➜ Go to source code of Db::debug()

\nn\t3::Db()->delete($table = '', $constraint = [], $reallyDelete = false); 

Datenbank-Eintrag löschen. Klein und Fein. Es kann entweder ein Tabellenname und die UID übergeben werden - oder ein Model.

Löschen eines Datensatzes per Tabellenname und uid oder einem beliebigen Constraint:

// Löschen anhand der uid
\nn\t3::Db()->delete('table', $uid);

// Löschen anhand eines eigenen Feldes
\nn\t3::Db()->delete('table', ['uid_local'=>$uid]);

// Eintrag komplett und unwiderruflich löschen (nicht nur per Flag deleted = 1 entfernen)
\nn\t3::Db()->delete('table', $uid, true);
Copied!

Löschen eines Datensatzes per Model:

\nn\t3::Db()->delete( $model );
Copied!
@param mixed $table
@param array $constraint
@param boolean $reallyDelete
@return mixed

| ➜ Go to source code of Db::delete()

\nn\t3::Db()->deleteWithAllFiles($model); 

Die DSGVO-Variante des Löschens.

Radikales entfernen aller Spuren eines Datensatzen inkl. der physischen SysFiles, die mit dem Model verknüpft sind. Mit Vorsicht zu verwenden, da keine Relationen auf das zu löschende Model geprüft werden.

\nn\t3::deleteWithAllFiles( $model );
Copied!
@param \TYPO3\CMS\Extbase\DomainObject\AbstractEntity $model
@return void

| ➜ Go to source code of Db::deleteWithAllFiles()

\nn\t3::Db()->filterDataForTable($data = [], $table = ''); 

In key/val-Array nur Elemente behalten, deren keys auch in TCA für bestimmte Tabelle existieren

@param array $data
@param string $table
@return array

| ➜ Go to source code of Db::filterDataForTable()

\nn\t3::Db()->findAll($table = '', $ignoreEnableFields = false); 

Holt ALLE Eintrag aus einer Datenbank-Tabelle.

Die Daten werden als Array zurückgegeben – das ist (leider) noch immer die absolute performanteste Art, viele Datensätze aus einer Tabelle zu holen, da kein DataMapper die einzelnen Zeilen parsen muss.

// Alle Datensätze holen. "hidden" wird berücksichtigt.
\nn\t3::Db()->findAll('fe_users');

// Auch Datensätze holen, die "hidden" sind
\nn\t3::Db()->findAll('fe_users', true);
Copied!
@param string $table
@param boolean $ignoreEnableFields
@return array

| ➜ Go to source code of Db::findAll()

\nn\t3::Db()->findByUid($table = '', $uid = NULL, $ignoreEnableFields = false); 

Findet einen Eintrag anhand der UID. Funktioniert auch, wenn Frontend noch nicht initialisiert wurden, z.B. während AuthentificationService läuft oder im Scheduler.

\nn\t3::Db()->findByUid('fe_user', 12);
\nn\t3::Db()->findByUid('fe_user', 12, true);
Copied!
@param string $table
@param int $uid
@param boolean $ignoreEnableFields
@return array

| ➜ Go to source code of Db::findByUid()

\nn\t3::Db()->findByUids($table = '', $uids = NULL, $ignoreEnableFields = false); 

Findet Einträge anhand mehrerer UIDs.

\nn\t3::Db()->findByUids('fe_user', [12,13]);
\nn\t3::Db()->findByUids('fe_user', [12,13], true);
Copied!
@param string $table
@param int|array $uids
@param boolean $ignoreEnableFields
@return array

| ➜ Go to source code of Db::findByUids()

\nn\t3::Db()->findByValues($table = NULL, $where = [], $useLogicalOr = false, $ignoreEnableFields = false, $fieldsToGet = [], $additionalQueryParams = []); 

Findet ALLE Einträge anhand eines gewünschten Feld-Wertes. Funktioniert auch, wenn Frontend noch nicht initialisiert wurde.

// SELECT  FROM fe_users WHERE email = 'david@99grad.de'
\nn\t3::Db()->findByValues('fe_users', ['email'=>'david@99grad.de']);

// SELECT  FROM fe_users WHERE uid IN (1,2,3)
\nn\t3::Db()->findByValues('fe_users', ['uid'=>[1,2,3]]);

// SELECT uid, username FROM fe_users WHERE name = 'test'
\nn\t3::Db()->findByValues('fe_users', ['name'=>'test'], false, false, ['uid', 'username']);

// SELECT  FROM fe_users WHERE name = 'test' LIMIT 1
\nn\t3::Db()->findByValues('fe_users', ['name'=>'test'], false, false, false, ['limit'=>1]);

// SELECT  FROM fe_users WHERE name = 'test' LIMIT 2 OFFSET 3
\nn\t3::Db()->findByValues('fe_users', ['name'=>'test'], false, false, false, ['limit'=>2, 'offset'=>3]);
Copied!
@param string $table
@param array $whereArr
@param boolean $useLogicalOr
@param boolean $ignoreEnableFields
@param array|boolean $fieldsToGet
@param array $additionalQueryParams
@return array

| ➜ Go to source code of Db::findByValues()

\nn\t3::Db()->findIn($table = '', $column = '', $values = [], $ignoreEnableFields = false); 

Findet ALLE Einträge, die in der Spalte $column einen Wert aus dem Array $values enthält. Funktioniert auch, wenn das Frontend noch nicht initialisiert wurden. Alias zu \nn\t3::Db()->findByValues()

// SELECT  FROM fe_users WHERE uid IN (1,2,3)
\nn\t3::Db()->findIn('fe_users', 'uid', [1,2,3]);

// SELECT  FROM fe_users WHERE username IN ('david', 'martin')
\nn\t3::Db()->findIn('fe_users', 'username', ['david', 'martin']);
Copied!
@param string $table
@param string $column
@param array $values
@param boolean $ignoreEnableFields
@return array

| ➜ Go to source code of Db::findIn()

\nn\t3::Db()->findNotIn($table = '', $colName = '', $values = [], $ignoreEnableFields = false); 

Umkehrung zu \nn\t3::Db()->findIn():

Findet ALLE Einträge, die in der Spalte $column NICHT einen Wert aus dem Array $values enthält. Funktioniert auch, wenn das Frontend noch nicht initialisiert wurden.

// SELECT  FROM fe_users WHERE uid NOT IN (1,2,3)
\nn\t3::Db()->findNotIn('fe_users', 'uid', [1,2,3]);

// SELECT  FROM fe_users WHERE username NOT IN ('david', 'martin')
\nn\t3::Db()->findNotIn('fe_users', 'username', ['david', 'martin']);
Copied!
@param string $table
@param string $colName
@param array $values
@param boolean $ignoreEnableFields
@return array

| ➜ Go to source code of Db::findNotIn()

\nn\t3::Db()->findOneByValues($table = NULL, $whereArr = [], $useLogicalOr = false, $ignoreEnableFields = false, $fieldsToGet = []); 

Findet EINEN Eintrag anhand von gewünschten Feld-Werten.

// SELECT  FROM fe_users WHERE email = 'david@99grad.de'
\nn\t3::Db()->findOneByValues('fe_users', ['email'=>'david@99grad.de']);

// SELECT  FROM fe_users WHERE firstname = 'david' AND username = 'john'
\nn\t3::Db()->findOneByValues('fe_users', ['firstname'=>'david', 'username'=>'john']);

// SELECT  FROM fe_users WHERE firstname = 'david' OR username = 'john'
\nn\t3::Db()->findOneByValues('fe_users', ['firstname'=>'david', 'username'=>'john'], true);

// SELECT uid, name FROM fe_users WHERE firstname = 'david' OR username = 'john'
\nn\t3::Db()->findOneByValues('fe_users', ['firstname'=>'david', 'username'=>'john'], true, false, ['uid', 'name']);
Copied!
@param string $table
@param array $whereArr
@param boolean $useLogicalOr
@param boolean $ignoreEnableFields
@param array $fieldsToGet
@return array

| ➜ Go to source code of Db::findOneByValues()

\nn\t3::Db()->fixFileReferencesForModel($model); 

"Repariert" die SysFileReferences für Modelle, die eine Property haben, die statt einer ObjectStorage<FileReference> nur eine FileReference referenzieren. Zum aktuellen Zeitpunkt ist es unklar, weshalb TYPO3 diese zwar in der Tabelle sys_file_reference persistiert, aber das Feld tablenames leert – bzw. uid_foreign nicht setzt. Bei einer ObjectStorage<FileReference> tritt das Problem nicht auf.

// muss direkt nach dem persistieren des Models passieren
\nn\t3::Db()->fixFileReferencesForModel( $model );
Copied!

| ➜ Go to source code of Db::fixFileReferencesForModel()

\nn\t3::Db()->get($uid, $modelType = '', $ignoreEnableFields = false); 

Ein oder mehrere Domain-Model/Entity anhand einer uid holen. Es kann eine einzelne $uid oder eine Liste von $uids übergeben werden.

Liefert das "echte" Model/Object inklusive aller Relationen, analog zu einer Query über das Repository.

// Ein einzelnes Model anhand seiner uid holen
$model = \nn\t3::Db()->get( 1, \Nng\MyExt\Domain\Model\Name::class );

// Ein Array an Models anhand ihrer uids holen
$modelArray = \nn\t3::Db()->get( [1,2,3], \Nng\MyExt\Domain\Model\Name::class );

// Gibt auch hidden Models zurück
$modelArrayWithHidden = \nn\t3::Db()->get( [1,2,3], \Nng\MyExt\Domain\Model\Name::class, true );
Copied!
@param int $uid
@param string $modelType
@param boolean $ignoreEnableFields
@return Object

| ➜ Go to source code of Db::get()

\nn\t3::Db()->getColumn($table = '', $colName = '', $useSchemaManager = false); 

Eine Tabellen-Spalte (TCA) für bestimmte Tabelle holen

\nn\t3::Db()->getColumn( 'tablename', 'fieldname' );
Copied!
@param string $table
@param string $colName
@param boolean $useSchemaManager
@return array

| ➜ Go to source code of Db::getColumn()

\nn\t3::Db()->getColumnLabel($column = '', $table = ''); 

Lokalisiertes Label eines bestimmten TCA Feldes holen

@param string $column
@param string $table
@return string

| ➜ Go to source code of Db::getColumnLabel()

\nn\t3::Db()->getColumns($table = '', $useSchemaManager = false); 

Alle Tabellen-Spalten (TCA) für bestimmte Tabelle holen

// Felder anhand des TCA-Arrays holen
\nn\t3::Db()->getColumns( 'tablename' );

// Felder über den SchemaManager ermitteln
\nn\t3::Db()->getColumns( 'tablename', true );
Copied!
@param string $table
@param boolean $useSchemaManager
@return array

| ➜ Go to source code of Db::getColumns()

\nn\t3::Db()->getColumnsByType($table = '', $colType = '', $useSchemaManager = false); 

Felder einer Tabelle nach einem bestimmten Typ holen

\nn\t3::Db()->getColumnsByType( 'tx_news_domain_model_news', 'slug' );
Copied!
@param string $table
@param string $colType
@param boolean $useSchemaManager
@return array

| ➜ Go to source code of Db::getColumnsByType()

\nn\t3::Db()->getConnection(); 

Eine "rohe" Verbindung zur Datenbank holen. Nur in wirklichen Ausnahmefällen sinnvoll.

$connection = \nn\t3::Db()->getConnection();
$connection->fetchAll( 'SELECT  FROM tt_news WHERE 1;' );
Copied!

| @return \TYPO3\CMS\Core\Database\Connection

| ➜ Go to source code of Db::getConnection()

\nn\t3::Db()->getDeleteColumn($table = ''); 

Delete-Column für bestimmte Tabelle holen.

Diese Spalte wird als Flag für gelöschte Datensätze verwendet. Normalerweise: deleted = 1

@param string $table
@return string

| ➜ Go to source code of Db::getDeleteColumn()

\nn\t3::Db()->getQueryBuilder($table = ''); 

QueryBuilder für eine Tabelle holen

$queryBuilder = \nn\t3::Db()->getQueryBuilder( 'fe_users' );
Copied!

Beispiel:

$queryBuilder = \nn\t3::Db()->getQueryBuilder( 'fe_users' );
$queryBuilder->select('name')->from( 'fe_users' );
$queryBuilder->andWhere( $queryBuilder->expr()->eq( 'uid', $queryBuilder->createNamedParameter(12) ));
$rows = $queryBuilder->executeStatement()->fetchAllAssociative();
Copied!
@param string $table
@return QueryBuilder

| ➜ Go to source code of Db::getQueryBuilder()

\nn\t3::Db()->getRepositoryForModel($className = NULL); 

Instanz des Repositories für ein Model (oder einen Model-Klassennamen) holen.

\nn\t3::Db()->getRepositoryForModel( \My\Domain\Model\Name::class );
\nn\t3::Db()->getRepositoryForModel( $myModel );
Copied!
@param mixed $className
@return \TYPO3\CMS\Extbase\Persistence\Repository

| ➜ Go to source code of Db::getRepositoryForModel()

\nn\t3::Db()->getTableNameForModel($className = NULL); 

Tabellen-Name für ein Model (oder einen Model-Klassennamen) holen. Alias zu \nn\t3::Obj()->getTableName()

// tx_myext_domain_model_entry
\nn\t3::Db()->getTableNameForModel( $myModel );

// tx_myext_domain_model_entry
\nn\t3::Db()->getTableNameForModel( \My\Domain\Model\Name::class );
Copied!
@param mixed $className
@return string

| ➜ Go to source code of Db::getTableNameForModel()

\nn\t3::Db()->ignoreEnableFields($queryOrRepository, $ignoreStoragePid = true, $ignoreHidden = false, $ignoreDeleted = false, $ignoreStartEnd = false); 

Entfernt Default-Constraints zur StoragePID, hidden und/oder deleted zu einer Query oder Repository.

\nn\t3::Db()->ignoreEnableFields( $entryRepository );
\nn\t3::Db()->ignoreEnableFields( $query );
Copied!

Beispiel für eine Custom Query:

$table = 'tx_myext_domain_model_entry';
$queryBuilder = \nn\t3::Db()->getQueryBuilder( $table );
$queryBuilder->select('uid','title','hidden')->from( $table );
\nn\t3::Db()->ignoreEnableFields( $queryBuilder, true, true );
$rows = $queryBuilder->executeQuery()->fetchAllAssociative();
Copied!

Sollte das nicht reichen oder zu kompliziert werden, siehe:

\nn\t3::Db()->statement();
Copied!
@param mixed $queryOrRepository
@param boolean $ignoreStoragePid
@param boolean $ignoreHidden
@param boolean $ignoreDeleted
@param boolean $ignoreStartEnd
@return mixed

| ➜ Go to source code of Db::ignoreEnableFields()

\nn\t3::Db()->insert($tableNameOrModel = '', $data = []); 

Datenbank-Eintrag einfügen. Simpel und idiotensicher. Entweder kann der Tabellenname und ein Array übergeben werden - oder ein Domain-Model.

Einfügen eines neuen Datensatzes per Tabellenname und Daten-Array:

$insertArr = \nn\t3::Db()->insert('table', ['bodytext'=>'...']);
Copied!

Einfügen eines neuen Models. Das Repository wird automatisch ermittelt. Das Model wird direkt persistiert.

$model = new \My\Nice\Model();
$persistedModel = \nn\t3::Db()->insert( $model );
Copied!
@param mixed $tableNameOrModel
@param array $data
@return mixed

| ➜ Go to source code of Db::insert()

\nn\t3::Db()->insertMultiple($tableName = '', $rows = [], $colOrder = []); 

Mehrere Zeilen in Datenbank einfügen.

use TYPO3\CMS\Core\Database\Connection;

$data = [
    ['title' => 'Eins', 'tstamp'=>123],
    ['title' => 'Zwei', 'tstamp'=>123],
];
$colOrder = [
    'tstamp' => Connection::PARAM_INT,
    'title' => Connection::PARAM_STR,
];

\nn\t3::Db()->insertMultiple('table', $data, $colOrder);
Copied!
@param string $tableName
@param array $rows
@param array $colOrder
@return boolean

| ➜ Go to source code of Db::insertMultiple()

\nn\t3::Db()->insertOrUpdate($tableName, $whereArr = [], $model = []); 

Store an item in the database, but keep it unique by $whereArr = []

$data = [ profileUid: "", entityType: "", entityUid: "",  ... ];
\nn\un::Interaction()->insertOrUpdate( $data );
Copied!
@param int $feUserId
@param array $data
@return array $model

| ➜ Go to source code of Db::insertOrUpdate()

\nn\t3::Db()->orderBy($queryOrRepository, $ordering = []); 

Sortierung für ein Repository oder einen Query setzen.

$ordering = ['title' => \TYPO3\CMS\Extbase\Persistence\QueryInterface::ORDER_DESCENDING];
\nn\t3::Db()->orderBy( $queryOrRepository, $ordering );

// asc und desc können als synonym verwendet werden
$ordering = ['title' => 'asc'];
$ordering = ['title' => 'desc'];
\nn\t3::Db()->orderBy( $queryOrRepository, $ordering );
Copied!

Kann auch zum Sortieren nach einer Liste von Werten (z.B. uids) verwendet werden. Dazu wird ein Array für den Wert des einzelnen orderings übergeben:

$ordering = ['uid' => [3,7,2,1]];
\nn\t3::Db()->orderBy( $queryOrRepository, $ordering );
Copied!
@param mixed $queryOrRepository
@param array $ordering
@return mixed

| ➜ Go to source code of Db::orderBy()

\nn\t3::Db()->persistAll(); 

Alles persistieren.

\nn\t3::Db()->persistAll();
Copied!

| @return void

| ➜ Go to source code of Db::persistAll()

\nn\t3::Db()->quote($value = ''); 

Ein Ersatz für die mysqli_real_escape_string() Methode.

Sollte nur im Notfall bei Low-Level Queries verwendet werden. Besser ist es, preparedStatements zu verwenden.

Funktioniert nur bei SQL, nicht bei DQL.

$sword = \nn\t3::Db()->quote('test');          // => 'test'
$sword = \nn\t3::Db()->quote("test';SET");        // => 'test\';SET'
$sword = \nn\t3::Db()->quote([1, 'test', '2']);  // => [1, "'test'", '2']
$sword = \nn\t3::Db()->quote('"; DROP TABLE fe_user;#');
Copied!
@param string|array $value
@return string|array

| ➜ Go to source code of Db::quote()

\nn\t3::Db()->save($tableNameOrModel = '', $data = []); 

Datenbank-Eintrag erstellen ODER einen vorhandenen Datensatz updaten.

Entscheidet selbstständig, ob der Eintrag per UPDATE oder INSERT in die Datenbank eingefügt bzw. ein vorhandener Datensatz aktualisiert werden muss. Die Daten werden direkt persistiert!

Beispiel für Übergabe eines Tabellennamens und eines Arrays:

// keine uid übergeben? Dann INSERT eines neuen Datensatzes
\nn\t3::Db()->save('table', ['bodytext'=>'...']);

// uid übergeben? Dann UPDATE vorhandener Daten
\nn\t3::Db()->save('table', ['uid'=>123, 'bodytext'=>'...']);
Copied!

Beispiel für Übergabe eines Domain-Models:

// neues Model? Wird per $repo->add() eingefügt
$model = new \My\Nice\Model();
$model->setBodytext('...');
$persistedModel = \nn\t3::Db()->save( $model );

// vorhandenes Model? Wird per $repo->update() aktualisiert
$model = $myRepo->findByUid(123);
$model->setBodytext('...');
$persistedModel = \nn\t3::Db()->save( $model );
Copied!
@param mixed $tableNameOrModel
@param array $data
@return mixed

| ➜ Go to source code of Db::save()

\nn\t3::Db()->setFalConstraint($queryBuilder = NULL, $tableName = '', $falFieldName = '', $numFal = true, $operator = false); 

Constraint für sys_file_reference zu einem QueryBuilder hinzufügen. Beschränkt die Ergebnisse darauf, ob es eine FAL-Relation gibt.

$queryBuilder = \nn\t3::Db()->getQueryBuilder( $table );

// Nur Datensätze holen, die für falfield mindestes eine SysFileReference haben
\nn\t3::Db()->setFalConstraint( $queryBuilder, 'tx_myext_tablename', 'falfield' );

// ... die KEINE SysFileReference für falfield haben
\nn\t3::Db()->setFalConstraint( $queryBuilder, 'tx_myext_tablename', 'falfield', false );

// ... die GENAU 2 SysFileReferences haben
\nn\t3::Db()->setFalConstraint( $queryBuilder, 'tx_myext_tablename', 'falfield', 2 );

// ... die 2 oder weniger (less than or equal) SysFileReferences haben
\nn\t3::Db()->setFalConstraint( $queryBuilder, 'tx_myext_tablename', 'falfield', 2, 'lte' );
Copied!
@param \TYPO3\CMS\Core\Database\Query\QueryBuilder $queryBuilder
@param string $tableName
@param string $falFieldName
@param boolean $numFal
@param boolean $operator
@return \TYPO3\CMS\Core\Database\Query\QueryBuilder

| ➜ Go to source code of Db::setFalConstraint()

\nn\t3::Db()->setNotInSysCategoryConstraint($queryBuilder = NULL, $sysCategoryUids = [], $tableName = '', $categoryFieldName = 'categories'); 

Contraint auf Datensätze beschränken, die NICHT in eine der angegebenen Kategorien sind. Gegenteil und Alias zu \nn\t3::Db()->setSysCategoryConstraint()

$queryBuilder = \nn\t3::Db()->getQueryBuilder( $table );
\nn\t3::Db()->setNotInSysCategoryConstraint( $queryBuilder, [1,3,4], 'tx_myext_tablename', 'categories' );
Copied!
@param \TYPO3\CMS\Core\Database\Query\QueryBuilder $queryBuilder
@param array $sysCategoryUids
@param string $tableName
@param string $categoryFieldName
@return \TYPO3\CMS\Core\Database\Query\QueryBuilder

| ➜ Go to source code of Db::setNotInSysCategoryConstraint()

\nn\t3::Db()->setSysCategoryConstraint($queryBuilder = NULL, $sysCategoryUids = [], $tableName = '', $categoryFieldName = 'categories', $useNotIn = false); 

Constraint für sys_category / sys_category_record_mm zu einem QueryBuilder hinzufügen. Beschränkt die Ergebnisse auf die angegebenen Sys-Categories-UIDs.

$queryBuilder = \nn\t3::Db()->getQueryBuilder( $table );
\nn\t3::Db()->setSysCategoryConstraint( $queryBuilder, [1,3,4], 'tx_myext_tablename', 'categories' );
Copied!
@param \TYPO3\CMS\Core\Database\Query\QueryBuilder $querybuilder
@param array $sysCategoryUids
@param string $tableName
@param string $categoryFieldName
@param boolean $useNotIn
@return \TYPO3\CMS\Core\Database\Query\QueryBuilder

| ➜ Go to source code of Db::setSysCategoryConstraint()

\nn\t3::Db()->sortBy($objectArray, $fieldName = 'uid', $uidList = []); 

Sortiert Ergebnisse eines Queries nach einem Array und bestimmten Feld. Löst das Problem, dass eine ->in()-Query die Ergebnisse nicht in der Reihenfolge der übergebenen IDs liefert. Beispiel: | $query->matching($query->in('uid', [3,1,2])); kommt nicht zwingend in der Reihenfolge [3,1,2] zurück.

$insertArr = \nn\t3::Db()->sortBy( $storageOrArray, 'uid', [2,1,5]);
Copied!
@param mixed $objectArray
@param string $fieldName
@param array $uidList
@return array

| ➜ Go to source code of Db::sortBy()

\nn\t3::Db()->statement($statement = '', $params = [], $types = []); 

Eine "rohe" Query an die Datenbank absetzen. Näher an der Datenbank geht nicht. Du bist für alles selbst verantwortlich. Injections steht nur Deine (hoffentlich ausreichende :) Intelligenz entgegen.

Hilft z.B. bei Abfragen von Tabellen, die nicht Teil der Typo3 Installation sind und daher über den normal QueryBuilder nicht erreicht werden könnten.

// Variablen IMMER über escapen!
$keyword = \nn\t3::Db()->quote('suchbegriff');
$rows = \nn\t3::Db()->statement( "SELECT  FROM tt_news WHERE bodytext LIKE '%{$keyword}%'");

// oder besser gleich prepared statements verwenden:
$rows = \nn\t3::Db()->statement( 'SELECT  FROM tt_news WHERE bodytext LIKE :str', ['str'=>"%{$keyword}%"] );

// Typen können übergeben werden (bei Array wird das automatisch ermittelt)
$rows = \nn\t3::Db()->statement( 'SELECT  FROM tt_news WHERE uid IN (:uids)', ['uids'=>[1,2,3]], ['uids'=>Connection::PARAM_INT_ARRAY] );
Copied!

Bei einem SELECT Statement werden die Zeilen aus der Datenbank als Array zurückgegeben. Bei allen anderen Statements (z.B. UPDATE oder DELETE) wird die Anzahl der betroffenen Zeilen zurückgegeben.

@param string $statement
@param array $params
@param array $types
@return mixed

| ➜ Go to source code of Db::statement()

\nn\t3::Db()->tableExists($table = ''); 

Existiert eine bestimmte DB-Tabelle?

$exists = \nn\t3::Db()->tableExists('table');
Copied!

| @return boolean

| ➜ Go to source code of Db::tableExists()

\nn\t3::Db()->truncate($table = ''); 

Datenbank-Tabelle leeren. Löscht alle Einträge in der angegebenen Tabelle und setzt den Auto-Increment-Wert auf 0 zurück.

\nn\t3::Db()->truncate('table');
Copied!
@param string $table
@return boolean

| ➜ Go to source code of Db::truncate()

\nn\t3::Db()->undelete($table = '', $constraint = []); 

Gelöschten Datenbank-Eintrag wiederherstellen. Dazu wird der Flag für "gelöscht" (deleted) wieder auf 0 gesetzt wird.

\nn\t3::Db()->undelete('table', $uid);
\nn\t3::Db()->undelete('table', ['uid_local'=>$uid]);
Copied!
@param string $table
@param array $constraint
@return boolean

| ➜ Go to source code of Db::undelete()

\nn\t3::Db()->update($tableNameOrModel = '', $data = [], $uid = NULL); 

Datenbank-Eintrag aktualisieren. Schnell und einfach. Das Update kann entweder per Tabellenname und Daten-Array passieren. Oder man übergibt ein Model.

Beispiele:

// UPDATES table SET title='new' WHERE uid=1
\nn\t3::Db()->update('table', ['title'=>'new'], 1);

// UPDATES table SET title='new' WHERE uid IN (1,2,3)
\nn\t3::Db()->update('table', ['title'=>'new'], ['uid'=>[1,2,3]);

// UPDATE table SET title='new' WHERE email='david@99grad.de' AND pid=12
\nn\t3::Db()->update('table', ['title'=>'new'], ['email'=>'david@99grad.de', 'pid'=>12, ...]);
Copied!

Mit true statt einer $uid werden ALLE Datensätze der Tabelle geupdated.

// UPDATE table SET test='1' WHERE 1
\nn\t3::Db()->update('table', ['test'=>1], true);
Copied!

Statt einem Tabellenname kann auch ein einfach Model übergeben werden. Das Repository wird automatisch ermittelt und das Model direkt persistiert.

$model = $myRepo->findByUid(1);
\nn\t3::Db()->update( $model );
Copied!
@param mixed $tableNameOrModel
@param array $data
@param int $uid
@return mixed

| ➜ Go to source code of Db::update()

Methods