/** * @return bool */ public function evaluate() { $statement = DB::get()->from($this->arguments['model']); foreach ($this->match_fields as $column => $input_key) { $statement->where($column . ' = ?', $this->validator[$input_key]); } $this->instance = $statement->fetchRow(); return $this->instance instanceof Model; }
/** * @param $relation_name * @param Model $object * @param bool $remove_relation * @return bool * @throws Exception * @throws Wave\Exception */ public function _removeRelationObject($relation_name, Model $object, $remove_relation = true) { if (isset($this->_data[$relation_name])) { foreach ($this->_data[$relation_name] as $key => $relation) { if ($relation->_getFingerprint() === $object->_getFingerprint()) { //Unset unset($this->_data[$relation_name][$key]); //Renumber (so it doesn't accidentally map later down the track). $this->_data[$relation_name] = array_values($this->_data[$relation_name]); } } } if ($remove_relation) { $relation_data = $this->_getRelation($relation_name); switch ($relation_data['relation_type']) { case Relation::MANY_TO_MANY: $related_class = $relation_data['related_class']; $db = Wave\DB::get($related_class::_getDatabaseNamespace()); $query = $db->from($related_class, $from_alias); //Add in all of the related columns foreach ($relation_data['local_columns'] as $position => $local_column) { //At this point, may as well return as there aren't null-relations if ($this->_data[$local_column] === null) { return false; } $query->where(sprintf('%s.%s = ?', $from_alias, $db->escape($relation_data['related_columns'][$position])), $this->_data[$local_column]); } //Add in all of the related columns foreach ($relation_data['target_relation']['related_columns'] as $position => $related_column) { //At this point, may as well return as there aren't null-relations if ($object->{$related_column} === null) { return false; } $query->where(sprintf('%s.%s = ?', $from_alias, $db->escape($relation_data['target_relation']['local_columns'][$position])), $object->{$related_column}); } if ($rc = $query->fetchRow()) { return $rc->delete(); } break; case Relation::ONE_TO_MANY: foreach ($relation_data['related_columns'] as $position => $related_column) { $object->{$related_column} = null; } return $object->save(); break; } } }