Auf /admin/me/press-releases wurden bei einem User mit sehr vielen Firmen ~107.000 Company-Models geladen. Ursache: accessibleCompanyIds() nutzte das Eloquent-Relation-pluck() (ownedCompanies()->pluck() / companies()-> pluck()), das pro ID ein vollstaendiges Model hydratisiert. Die Methode wird ueber PressRelease::scopeAccessibleBy() pro Seitenaufruf ~2x ausgewertet (Status-Count- + Listen-Query) -> ~2x 53k Models. Fix: - toBase()->pluck() statt Relation-pluck(): liefert nur die ID-Werte ohne Hydration, wendet die Global Scopes (PortalScope) weiterhin an. - Ergebnis pro Request memoisiert (cachedAccessibleCompanyIds), da der Scope die Methode mehrfach aufruft. Messung (User 14016, 26.772 Firmen): 107.238 -> 24 hydratisierte Company-Models auf der PM-Liste. Ergebnis-IDs unveraendert. Regressionstests: accessibleCompanyIds liefert owned+member ohne Dubletten und hydratisiert 0 Company-Models. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| Feature | ||
| Unit | ||
| Pest.php | ||
| TestCase.php | ||