From 0fe94b92b3a49354c5af6eaa46f9789225653135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Vo=C5=99=C3=AD=C5=A1ek?= Date: Thu, 7 Mar 2024 12:01:31 +0100 Subject: [PATCH] reorganize Reference methods to be more logical --- src/Reference.php | 96 +++++++++++++++++++++++------------------------ 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/src/Reference.php b/src/Reference.php index 01a55ba30..6850e01e0 100644 --- a/src/Reference.php +++ b/src/Reference.php @@ -217,6 +217,43 @@ public function getOurModel(?Model $ourModelOrEntity): Model return $ourModel; } + protected function initTableAlias(): void + { + if (!$this->tableAlias) { + $ourModel = $this->getOurModel(null); + + $aliasFull = $this->link; + $alias = preg_replace('~_(' . preg_quote($ourModel->idField !== false ? $ourModel->idField : '', '~') . '|id)$~', '', $aliasFull); + $alias = preg_replace('~([0-9a-z]?)[0-9a-z]*[^0-9a-z]*~i', '$1', $alias); + if ($ourModel->tableAlias !== null) { + $aliasFull = $ourModel->tableAlias . '_' . $aliasFull; + $alias = preg_replace('~^_(.+)_[0-9a-f]{12}$~', '$1', $ourModel->tableAlias) . '_' . $alias; + } + $this->tableAlias = '_' . $alias . '_' . substr(md5($aliasFull), 0, 12); + } + } + + /** + * Returns default persistence for their model. + * + * @return Persistence|false + */ + protected function getDefaultPersistence(Model $theirModel) + { + $ourModel = $this->getOurModel(null); + + // this is useful for ContainsOne/Many implementation in case when you have + // SQL_Model->containsOne()->hasOne() structure to get back to SQL persistence + // from Array persistence used in ContainsOne model + if ($ourModel->containedInEntity !== null && $ourModel->containedInEntity->getModel()->issetPersistence()) { + return $ourModel->containedInEntity->getModel()->getPersistence(); + } + + return $ourModel->issetPersistence() + ? $ourModel->getPersistence() + : false; + } + /** * @param array $defaults */ @@ -245,6 +282,16 @@ protected function createTheirModelBeforeInit(array $defaults): Model return $theirModel; } + protected function createTheirModelSetPersistence(Model $theirModel): void + { + if (!$theirModel->issetPersistence()) { + $persistence = $this->getDefaultPersistence($theirModel); + if ($persistence !== false) { + $theirModel->setPersistence($persistence); + } + } + } + protected function createTheirModelAfterInit(Model $theirModel): void { if ($this->caption !== null) { @@ -275,59 +322,12 @@ protected function createTheirModelAfterInit(Model $theirModel): void final public function createTheirModel(array $defaults = []): Model { $theirModel = $this->createTheirModelBeforeInit($defaults); - $this->addToPersistence($theirModel, $defaults); + $this->createTheirModelSetPersistence($theirModel); $this->createTheirModelAfterInit($theirModel); return $theirModel; } - protected function initTableAlias(): void - { - if (!$this->tableAlias) { - $ourModel = $this->getOurModel(null); - - $aliasFull = $this->link; - $alias = preg_replace('~_(' . preg_quote($ourModel->idField !== false ? $ourModel->idField : '', '~') . '|id)$~', '', $aliasFull); - $alias = preg_replace('~([0-9a-z]?)[0-9a-z]*[^0-9a-z]*~i', '$1', $alias); - if ($ourModel->tableAlias !== null) { - $aliasFull = $ourModel->tableAlias . '_' . $aliasFull; - $alias = preg_replace('~^_(.+)_[0-9a-f]{12}$~', '$1', $ourModel->tableAlias) . '_' . $alias; - } - $this->tableAlias = '_' . $alias . '_' . substr(md5($aliasFull), 0, 12); - } - } - - protected function addToPersistence(Model $theirModel): void - { - if (!$theirModel->issetPersistence()) { - $persistence = $this->getDefaultPersistence($theirModel); - if ($persistence !== false) { - $theirModel->setPersistence($persistence); - } - } - } - - /** - * Returns default persistence for theirModel. - * - * @return Persistence|false - */ - protected function getDefaultPersistence(Model $theirModel) - { - $ourModel = $this->getOurModel(null); - - // this is useful for ContainsOne/Many implementation in case when you have - // SQL_Model->containsOne()->hasOne() structure to get back to SQL persistence - // from Array persistence used in ContainsOne model - if ($ourModel->containedInEntity !== null && $ourModel->containedInEntity->getModel()->issetPersistence()) { - return $ourModel->containedInEntity->getModel()->getPersistence(); - } - - return $ourModel->issetPersistence() - ? $ourModel->getPersistence() - : false; - } - /** * Create their model. May be overridden to imply traversal conditions. *