/** * @param string $relation * @param null|RedBeanModel $precedingModel * @param null|string $precedingRelation * @return bool */ protected function relationLinksToPrecedingRelation($relation, RedBeanModel $precedingModel = null, $precedingRelation = null) { assert('is_string($relation)'); if ($precedingModel == null || $precedingRelation == null) { return false; } //Check if the relation is a derived relation in which case return false because it is handled by //@see self::inferredRelationLinksToPrecedingRelation if (!$precedingModel->isAttribute($precedingRelation)) { return false; } if (get_class($precedingModel) != $this->model->getRelationmodelClassName($relation)) { return false; } if ($precedingModel->getRelationLinkType($precedingRelation) == RedBeanModel::LINK_TYPE_ASSUMPTIVE && $this->model->getRelationLinkType($relation) == RedBeanModel::LINK_TYPE_ASSUMPTIVE) { return true; } //Check for LINK_TYPE_SPECIFIC if ($precedingModel->getRelationLinkType($precedingRelation) == RedBeanModel::LINK_TYPE_SPECIFIC && $this->model->getRelationLinkType($relation) == RedBeanModel::LINK_TYPE_SPECIFIC && $precedingModel->getRelationLinkName($precedingRelation) == $this->model->getRelationLinkName($relation)) { return true; } return false; }