function erase($filter = NULL)
{
$db = $this->db;
$now = microtime(TRUE);
$data =& $db->read($this->file);
$pkey = ['_id' => $this->id];
if ($filter) {
foreach ($this->find($filter, NULL, FALSE) as $mapper) {
if (!$mapper->erase()) {
return FALSE;
}
}
return TRUE;
} elseif (isset($this->id)) {
unset($data[$this->id]);
parent::erase();
} else {
return FALSE;
}
if (isset($this->trigger['beforeerase']) && \Base::instance()->call($this->trigger['beforeerase'], [$this, $pkey]) === FALSE) {
return FALSE;
}
$db->write($this->file, $data);
if ($filter) {
$args = isset($filter[1]) && is_array($filter[1]) ? $filter[1] : array_slice($filter, 1, NULL, TRUE);
$args = is_array($args) ? $args : [1 => $args];
foreach ($args as $key => $val) {
$vals[] = \Base::instance()->stringify(is_array($val) ? $val[0] : $val);
$keys[] = '/' . (is_numeric($key) ? '\\?' : preg_quote($key)) . '/';
}
}
$db->jot('(' . sprintf('%.1f', 1000.0 * (microtime(TRUE) - $now)) . 'ms) ' . $this->file . ' [erase] ' . ($filter ? preg_replace($keys, $vals, $filter[0], 1) : ''));
if (isset($this->trigger['aftererase'])) {
\Base::instance()->call($this->trigger['aftererase'], [$this, $pkey]);
}
return TRUE;
}