Db::findByValues()
\nn\t3::Db()->findByValues($table = NULL, $where = [], $useLogicalOr = false, $ignoreEnableFields = false, $fieldsToGet = [], $additionalQueryParams = []);
Finds ALL entries based on a desired field value. Also works if the frontend has not yet been initialized.
// 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
Source Code
public function findByValues( $table = null, $where = [], $useLogicalOr = false, $ignoreEnableFields = false, $fieldsToGet = [], $additionalQueryParams = [] )
{
// Nur Felder behalten, die auch in Tabelle (TCA) existieren
$whereArr = $this->filterDataForTable( $where, $table );
// nichts mehr übrig? Dann macht die Abfrage keinen Sinn
if ($where && !$whereArr) {
return [];
}
if (!$fieldsToGet) {
$fieldsToGet = ['*'];
}
$queryBuilder = $this->getQueryBuilder( $table );
$queryBuilder->select(...$fieldsToGet)->from( $table );
// Alle Einschränkungen z.B. hidden oder starttime / endtime entfernen?
if ($ignoreEnableFields) {
$queryBuilder->getRestrictions()->removeAll();
}
// set LIMIT?
if ($limit = $additionalQueryParams['limit'] ?? false) {
$queryBuilder->setMaxResults( $limit );
}
// set LIMIT OFFSET?
if ($offset = $additionalQueryParams['offset'] ?? false) {
$queryBuilder->setFirstResult( $offset );
}
if ($whereArr) {
foreach ($whereArr as $colName=>$v) {
if (is_array($v)) {
$v = $this->quote( $v );
$expr = $queryBuilder->expr()->in($colName, $v );
if ($uids = \nn\t3::Arrays($v)->intExplode()) {
$this->orderBy( $queryBuilder, ["{$table}.{$colName}"=>$uids] );
}
} else {
$expr = $queryBuilder->expr()->eq( $colName, $queryBuilder->createNamedParameter( $v ) );
}
if (!$useLogicalOr) {
$queryBuilder->andWhere( $expr );
} else {
$queryBuilder->orWhere( $expr );
}
}
}
// "deleted" IMMER berücksichtigen!
if ($deleteCol = $this->getDeleteColumn( $table )) {
$queryBuilder->andWhere( $queryBuilder->expr()->eq($deleteCol, 0) );
}
$rows = $queryBuilder->executeQuery()->fetchAllAssociative();
return $rows;
}
Copied!