From 820dcf3f082625f1a443ded41911f89ba56224f5 Mon Sep 17 00:00:00 2001 From: markhuot Date: Tue, 16 Jul 2024 18:20:39 -0400 Subject: [PATCH] use Craft's internal cache of field layouts this way when we're generating a GQL schema we don't hit the database for every field for every link type for every layout --- src/base/Link.php | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/base/Link.php b/src/base/Link.php index a780d0d..8cfbf00 100644 --- a/src/base/Link.php +++ b/src/base/Link.php @@ -205,7 +205,7 @@ public function scenarios(): array public function defineRules(): array { $rules = parent::defineRules(); - + // Validation for only when saving Hyper fields and their settings $rules[] = [['label', 'handle'], 'required', 'on' => [self::SCENARIO_SETTINGS]]; @@ -313,7 +313,17 @@ public function getFieldLayout(): ?FieldLayout } if ($this->layoutUid) { - $this->_fieldLayout = Hyper::$plugin->getService()->getFieldLayoutByUid($this->layoutUid); + $fieldLayout = null; + $layouts = Craft::$app->getFields()->getLayoutsByType(static::class); + + foreach ($layouts as $layout) { + if ($layout->uid === $this->layoutUid) { + $fieldLayout = $layout; + break; + } + } + + $this->_fieldLayout = $fieldLayout; } return $this->_fieldLayout;