[FEATURE] Add method for fetching single record 59/29959/2
authorFrancois Suter <francois@typo3.org>
Fri, 9 May 2014 06:57:00 +0000 (08:57 +0200)
committerFrancois Suter <francois@typo3.org>
Fri, 9 May 2014 07:02:23 +0000 (09:02 +0200)
Introduce a method for retrieving a single record, similar to
t3lib_DB::exec_SELECTgetSingleRow().

Resolves: #56087
Releases: 2.3
Change-Id: I9a4562e5e6501557fd69f43d9aff8d07a6973461
Reviewed-on: https://review.typo3.org/29959
Reviewed-by: Francois Suter
Tested-by: Francois Suter
ChangeLog
class.tx_overlays.php
doc/manual.pdf
doc/manual.sxw

index d5006d6..240e75d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2014-05-09 Francois Suter (Cobweb)  <typo3@cobweb.ch>
+
+       * Added method for returning a single record, resolves #56087
+
 2013-11-12 Francois Suter (Cobweb)  <typo3@cobweb.ch>
 
        * Added missing return statement, resolves #53571
index 7b14cbc..116ee78 100644 (file)
@@ -137,6 +137,32 @@ final class tx_overlays {
        }
 
        /**
+        * Retrieves a single record from the given table, properly overlaid for version and language.
+        *
+        * NOTE: this method first collects all records and then returns the first one, which makes it possible
+        * to filter out records which may not have a translation, for example. However this is not perfect as the
+        * sorting is still done on the SQL side, so that the first record in a translated language may not be correct
+        * for alphabetical ordering. A sorting on the PHP side could be included in the future, similar to what is
+        * done class tx_dataquery_wrapper (EXT:dataquery).
+        *
+        * @param string $selectFields List of fields to select from the table. This is what comes right after "SELECT ...". Required value.
+        * @param string $fromTable Table from which to select. This is what comes right after "FROM ...". Required value.
+        * @param string $whereClause Optional additional WHERE clauses put in the end of the query. NOTICE: You must escape values in this argument with $this->fullQuoteStr() yourself! DO NOT PUT IN GROUP BY, ORDER BY or LIMIT!
+        * @param string $groupBy Optional GROUP BY field(s), if none, supply blank string.
+        * @param string $orderBy Optional ORDER BY field(s), if none, supply blank string.
+        * @return array
+        * @throws Exception
+        */
+       public static function getSingleRecordForTable($selectFields, $fromTable, $whereClause = '', $groupBy = '', $orderBy = '') {
+               $records = self::getAllRecordsForTable($selectFields, $fromTable, $whereClause, $groupBy, $orderBy);
+               if (count($records) > 0) {
+                       return array_shift($records);
+               } else {
+                       throw new \Exception('No record found', 1397483854);
+               }
+       }
+
+       /**
         * This method gets the SQL condition to apply for fetching the proper language
         * depending on the localization settings in the TCA
         *
index 27e1b9e..6e2faba 100644 (file)
Binary files a/doc/manual.pdf and b/doc/manual.pdf differ
index 9eb28c0..3859d9c 100755 (executable)
Binary files a/doc/manual.sxw and b/doc/manual.sxw differ