return array_pop($items);
}
+ /**
+ * Return the one-and-only result record.
+ *
+ * If there are too many or too few results, then throw an exception.
+ *
+ * @return array
+ * @throws \API_Exception
+ */
+ public function single() {
+ $result = NULL;
+ foreach ($this as $values) {
+ if ($result === NULL) {
+ $result = $values;
+ }
+ else {
+ throw new \API_Exception("Expected to find one {$this->entity} record, but there were multiple.");
+ }
+ }
+
+ if ($result === NULL) {
+ throw new \API_Exception("Expected to find one {$this->entity} record, but there were zero.");
+ }
+
+ return $result;
+ }
+
/**
* @param int $index
* @return array|null
$limit2 = Contact::get(FALSE)->setLimit(2)->addSelect('sort_name', 'row_count')->execute();
$this->assertCount(2, (array) $limit2);
$this->assertCount($num, $limit2);
+ try {
+ $limit2->single();
+ }
+ catch (\API_Exception $e) {
+ $this->assertRegExp(';Expected to find one Contact record;', $e->getMessage());
+ }
+ $limit1 = Contact::get(FALSE)->setLimit(1)->execute();
+ $this->assertCount(1, (array) $limit1);
+ $this->assertCount(1, $limit1);
+ $this->assertTrue(!empty($limit1->single()['sort_name']));
}
}