$this->totalCount = $totalCount ?? count($models);
}
+ /**
+ * @inheritDoc
+ */
+ public function offsetSet($offset, $value)
+ {
+ if (is_null($offset)) {
+ $this->totalCount++;
+ }
+
+ parent::offsetSet($offset, $value);
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function offsetUnset($offset)
+ {
+ if ($this->offsetExists($offset)) {
+ $this->totalCount--;
+ }
+
+ parent::offsetUnset($offset);
+ }
+
/**
* @return int
*/
{
return $this->totalCount;
}
+
+ /**
+ * Return the values from a single field in the collection
+ *
+ * @param string $column
+ * @param int|null $index_key
+ * @return array
+ * @see array_column()
+ */
+ public function column($column, $index_key = null)
+ {
+ return array_column($this->getArrayCopy(), $column, $index_key);
+ }
+
+ /**
+ * Apply a callback function on all elements in the collection and returns a new collection with the updated elements
+ *
+ * @param callable $callback
+ * @return BaseCollection
+ * @see array_map()
+ */
+ public function map(callable $callback)
+ {
+ return new static(array_map($callback, $this->getArrayCopy()), $this->getTotalCount());
+ }
+
+ /**
+ * Filters the collection based on a callback that returns a boolean whether the current item should be kept.
+ *
+ * @param callable|null $callback
+ * @param int $flag
+ * @return BaseCollection
+ * @see array_filter()
+ */
+ public function filter(callable $callback = null, int $flag = 0)
+ {
+ return new static(array_filter($this->getArrayCopy(), $callback, $flag));
+ }
}
return $model;
}
+ /**
+ * Magic isset method. Returns true if the field exists, either in the data prperty array or in any of the local properties.
+ * Used by array_column() on an array of objects.
+ *
+ * @param $name
+ * @return bool
+ */
+ public function __isset($name)
+ {
+ return in_array($name, array_merge(array_keys($this->data), array_keys(get_object_vars($this))));
+ }
+
/**
* Magic getter. This allows to retrieve model fields with the following syntax:
* - $model->field (outside of class)
*/
public function __get($name)
{
- if (empty($this->data['id'])) {
- throw new HTTPException\InternalServerErrorException(static::class . ' record uninitialized');
- }
+ $this->checkValid();
if (!array_key_exists($name, $this->data)) {
throw new HTTPException\InternalServerErrorException('Field ' . $name . ' not found in ' . static::class);
{
return $this->data;
}
+
+ protected function checkValid()
+ {
+ if (empty($this->data['id'])) {
+ throw new HTTPException\InternalServerErrorException(static::class . ' record uninitialized');
+ }
+ }
}