{"id":2041,"date":"2018-09-28T12:12:47","date_gmt":"2018-09-28T10:12:47","guid":{"rendered":"https:\/\/vielhuber.de\/?p=2041"},"modified":"2020-10-09T17:50:30","modified_gmt":"2020-10-09T15:50:30","slug":"tricks-fuer-laravel-eloquent-relationships","status":"publish","type":"post","link":"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/","title":{"rendered":"Tricks f\u00fcr Laravel Eloquent Relationships"},"content":{"rendered":"\n<p>Eine St\u00e4rke von <a href=\"https:\/\/laravel.com\/\" target=\"_blank\" rel=\"noopener noreferrer\">Laravel<\/a> ist die elegante Syntax. Hat man in Laravel (durch sehr viele Tabellen in der Datenbank) sehr viele Models und Relationships, kann das Traversieren aber doch oftmals in weniger elegantem Code enden. Im Laufe der Zeit haben sich f\u00fcr mich drei kleine Erweiterungen bew\u00e4hrt, die ich nachfolgend kurz vorstellen will. Dazu nutzen wir lediglich etwas Vererbung, magische Methoden und Custom Collections.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Zuerst legen wir ein neues Model unter&nbsp;<strong>app\\ConvenienceModel.php<\/strong> an:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"01.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Anschlie\u00dfend lassen wir alle Models von unserem neuen <strong>ConvenienceModel<\/strong> erben:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"02.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Eigene Funktionen mit Relationships mischen<\/h3>\n\n\n\n<p>Will man verbundene Models erhalten, nutzt man zum Aufruf die Standardsyntax:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"03.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>F\u00fcgt man nun eigene Business Logic hinzu, verwendet man gerne die (Lower) Camel Case Notation:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"04.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Wir wollen die Syntax beider Varianten vereinheitlichen. Dazu f\u00fcgen wir zum <strong>ConvenienceModel<\/strong> die magische Methode <a href=\"http:\/\/php.net\/manual\/de\/language.oop5.overloading.php#object.call\" target=\"_blank\" rel=\"noopener noreferrer\">__call<\/a>&nbsp;hinzu:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"05.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Damit ist beispielsweise im oberen Beispiel auch dieser Aufruf m\u00f6glich:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"06.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Leere Objekte pr\u00fcfen<\/h3>\n\n\n\n<p>Will man zu einer Personenaddresse den Namen des Landes ausgeben, sieht man oft den folgenden Code:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"07.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Um das zu verhindern, binden wir die Library <a href=\"https:\/\/github.com\/vielhuber\/stringhelper\" target=\"_blank\" rel=\"noopener noreferrer\">stringhelper<\/a> ein und lassen bei einem nicht gefundenen Model eine spezielles Objekt der leeren Klasse <strong>empty<\/strong> zur\u00fcckgeben:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"08.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Damit gelingt auch der Aufruf (in diesem Beispiel wird im Falle, das etwas gefunden wird, wird der Name des Landes ausgegeben, in allen anderen F\u00e4llen ein leerer String).<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"09.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Wollen wir auch den Fall abdecken, dass der User mit der ID 42 m\u00f6glicherweise gar nicht existiert, bauen wir uns hierf\u00fcr ebenfalls eine kleine Helper-Funktion:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"17.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Damit liefert der folgende Aufruf auch dann einen leeren String, wenn der User \u00fcberhaupt nicht existiert:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"18.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">n:m-Relationen bequem traversieren<\/h3>\n\n\n\n<p>Schlie\u00dflich wollen wir noch folgenden Code vereinfachen:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"10.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Dazu nutzen wir die M\u00f6glichkeit von <a href=\"https:\/\/laravel.com\/docs\/5.7\/eloquent-collections#custom-collections\" target=\"_blank\" rel=\"noopener noreferrer\">Custom Collections<\/a>. Wir erweitern zun\u00e4chst das <strong>ConvenienceModel<\/strong>:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"11.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Anschlie\u00dfend erstellen wir die Datei <strong>app\\Helpers\\ConvenienceCollection.php<\/strong>, die daf\u00fcr sorgt, dass der Aufruf unbekannter Funktionen bei Collections die Funktion f\u00fcr allen Items der Collection ausf\u00fchrt:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"12.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Damit k\u00f6nnen wir folgenden Code nutzen, um alle Namen aller L\u00e4nder aller Adressen aller Eltern der Person auszugeben:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"13.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Aber auch Aufrufe wie der folgende sind m\u00f6glich:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"26.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sortieren nach mehreren Spalten<\/h3>\n\n\n\n<p>Folgender Aufruf sortiert lediglich nach <strong>location<\/strong>, obwohl das nicht wahrscheinlich gew\u00fcnscht war:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"14.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Um das Sortieren nach mehreren Spalten zu erm\u00f6glichen, erweitern wir unsere ConvenienceCollection:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"15.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Damit k\u00f6nnen wir dann die Collection auch nach mehreren Spalten sortieren mit:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"16.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Standardsortierung<\/h3>\n\n\n\n<p>Wir erweitern die ConvenienceCollection um eine weitere Hilfsfunktion:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"23.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Nun kann man jedem Model auch eine individuelle Standardsortierungsfunktion mitgeben:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"24.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Damit k\u00f6nnen wir eine Collection sortieren mit:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"25.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Objektbezeichnungen<\/h3>\n\n\n\n<p>Jedes Model implementiert die Methode getLabel (getName variiert je nach Model):<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"19.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p>Damit kann man schnell und einfach den Namen eines Objekts ausgeben. Anschlie\u00dfend kann man in der ConvenienceCollection noch die Helper-Methode sortByLabel implementieren:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"20.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Leere Resultate<\/h3>\n\n\n\n<p>Ist ein Zwischenschritt leer, liefern die Laravel-Funktionen first() und last() normalerweise null zur\u00fcck. Deshalb f\u00fchren wir getFirst() und getLast() ein, sodass folgender Aufruf immer gelingt:<\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"21.php\">b45e29b9125c2ab565b5526442437686<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p> Hiermit liefern wir einen __empty_helper zur\u00fcck, den __x erkennt: <\/p>\n\n\n\n<p class=\"githubgist\" data-gist-file=\"22.php\">b45e29b9125c2ab565b5526442437686<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine St\u00e4rke von Laravel ist die elegante Syntax. Hat man in Laravel (durch sehr viele Tabellen in der Datenbank) sehr viele Models und Relationships, kann das Traversieren aber doch oftmals in weniger elegantem Code enden. Im Laufe der Zeit haben sich f\u00fcr mich drei kleine Erweiterungen bew\u00e4hrt, die ich nachfolgend kurz vorstellen will. Dazu nutzen [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"gtbabel_prevent_lngs":"","gtbabel_alt_lng":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-2041","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-blog"},"acf":[],"yoast_head":"<title>Tricks f\u00fcr Laravel Eloquent Relationships &#060; Vielhuber David<\/title>\n<meta name=\"description\" content=\"Eine St\u00e4rke von Laravel ist die elegante Syntax. Hat man in Laravel (durch sehr viele Tabellen in der Datenbank) sehr viele Models und Relationships,...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tricks f\u00fcr Laravel Eloquent Relationships &#060; Vielhuber David\" \/>\n<meta property=\"og:description\" content=\"Eine St\u00e4rke von Laravel ist die elegante Syntax. Hat man in Laravel (durch sehr viele Tabellen in der Datenbank) sehr viele Models und Relationships, kann\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/\" \/>\n<meta property=\"og:site_name\" content=\"Vielhuber David\" \/>\n<meta property=\"article:published_time\" content=\"2018-09-28T10:12:47+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-10-09T15:50:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"700\" \/>\n\t<meta property=\"og:image:height\" content=\"552\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"David\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@vielhuber\" \/>\n<meta name=\"twitter:site\" content=\"@vielhuber\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"David\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/tricks-fuer-laravel-eloquent-relationships\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/tricks-fuer-laravel-eloquent-relationships\\\/\"},\"author\":{\"name\":\"David\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"headline\":\"Tricks f\u00fcr Laravel Eloquent Relationships\",\"datePublished\":\"2018-09-28T10:12:47+00:00\",\"dateModified\":\"2020-10-09T15:50:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/tricks-fuer-laravel-eloquent-relationships\\\/\"},\"wordCount\":663,\"publisher\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"articleSection\":[\"Blog\"],\"inLanguage\":\"de\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/tricks-fuer-laravel-eloquent-relationships\\\/\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/tricks-fuer-laravel-eloquent-relationships\\\/\",\"name\":\"Tricks f\u00fcr Laravel Eloquent Relationships &#060; Vielhuber David\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#website\"},\"datePublished\":\"2018-09-28T10:12:47+00:00\",\"dateModified\":\"2020-10-09T15:50:30+00:00\",\"description\":\"Eine St\u00e4rke von Laravel ist die elegante Syntax. Hat man in Laravel (durch sehr viele Tabellen in der Datenbank) sehr viele Models und Relationships, kann\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/tricks-fuer-laravel-eloquent-relationships\\\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vielhuber.de\\\/blog\\\/tricks-fuer-laravel-eloquent-relationships\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/blog\\\/tricks-fuer-laravel-eloquent-relationships\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vielhuber.de\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tricks f\u00fcr Laravel Eloquent Relationships\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#website\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/\",\"name\":\"Vielhuber David\",\"description\":\"Full-Stack Developer\",\"publisher\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vielhuber.de\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/vielhuber.de\\\/#\\\/schema\\\/person\\\/64d4ff14713d413ea4d9b210d0c2c6ef\",\"name\":\"David\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"url\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"contentUrl\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\",\"width\":700,\"height\":552,\"caption\":\"David\"},\"logo\":{\"@id\":\"https:\\\/\\\/vielhuber.de\\\/wp-content\\\/uploads\\\/about.jpg\"},\"sameAs\":[\"https:\\\/\\\/x.com\\\/vielhuber\"]}]}<\/script>","yoast_head_json":{"title":"Tricks f\u00fcr Laravel Eloquent Relationships &#060; Vielhuber David","description":"Eine St\u00e4rke von Laravel ist die elegante Syntax. Hat man in Laravel (durch sehr viele Tabellen in der Datenbank) sehr viele Models und Relationships,...","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/","og_locale":"de_DE","og_type":"article","og_title":"Tricks f\u00fcr Laravel Eloquent Relationships &#060; Vielhuber David","og_description":"Eine St\u00e4rke von Laravel ist die elegante Syntax. Hat man in Laravel (durch sehr viele Tabellen in der Datenbank) sehr viele Models und Relationships, kann","og_url":"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/","og_site_name":"Vielhuber David","article_published_time":"2018-09-28T10:12:47+00:00","article_modified_time":"2020-10-09T15:50:30+00:00","og_image":[{"width":700,"height":552,"url":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","type":"image\/jpeg"}],"author":"David","twitter_card":"summary_large_image","twitter_creator":"@vielhuber","twitter_site":"@vielhuber","twitter_misc":{"Verfasst von":"David","Gesch\u00e4tzte Lesezeit":"3\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/#article","isPartOf":{"@id":"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/"},"author":{"name":"David","@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"headline":"Tricks f\u00fcr Laravel Eloquent Relationships","datePublished":"2018-09-28T10:12:47+00:00","dateModified":"2020-10-09T15:50:30+00:00","mainEntityOfPage":{"@id":"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/"},"wordCount":663,"publisher":{"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"articleSection":["Blog"],"inLanguage":"de"},{"@type":"WebPage","@id":"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/","url":"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/","name":"Tricks f\u00fcr Laravel Eloquent Relationships &#060; Vielhuber David","isPartOf":{"@id":"https:\/\/vielhuber.de\/#website"},"datePublished":"2018-09-28T10:12:47+00:00","dateModified":"2020-10-09T15:50:30+00:00","description":"Eine St\u00e4rke von Laravel ist die elegante Syntax. Hat man in Laravel (durch sehr viele Tabellen in der Datenbank) sehr viele Models und Relationships, kann","breadcrumb":{"@id":"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vielhuber.de\/blog\/tricks-fuer-laravel-eloquent-relationships\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vielhuber.de\/"},{"@type":"ListItem","position":2,"name":"Tricks f\u00fcr Laravel Eloquent Relationships"}]},{"@type":"WebSite","@id":"https:\/\/vielhuber.de\/#website","url":"https:\/\/vielhuber.de\/","name":"Vielhuber David","description":"Full-Stack Developer","publisher":{"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vielhuber.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/vielhuber.de\/#\/schema\/person\/64d4ff14713d413ea4d9b210d0c2c6ef","name":"David","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","url":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","contentUrl":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg","width":700,"height":552,"caption":"David"},"logo":{"@id":"https:\/\/vielhuber.de\/wp-content\/uploads\/about.jpg"},"sameAs":["https:\/\/x.com\/vielhuber"]}]}},"_links":{"self":[{"href":"https:\/\/vielhuber.de\/ta\/wp-json\/wp\/v2\/posts\/2041","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vielhuber.de\/ta\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vielhuber.de\/ta\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vielhuber.de\/ta\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/vielhuber.de\/ta\/wp-json\/wp\/v2\/comments?post=2041"}],"version-history":[{"count":31,"href":"https:\/\/vielhuber.de\/ta\/wp-json\/wp\/v2\/posts\/2041\/revisions"}],"predecessor-version":[{"id":2784,"href":"https:\/\/vielhuber.de\/ta\/wp-json\/wp\/v2\/posts\/2041\/revisions\/2784"}],"wp:attachment":[{"href":"https:\/\/vielhuber.de\/ta\/wp-json\/wp\/v2\/media?parent=2041"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vielhuber.de\/ta\/wp-json\/wp\/v2\/categories?post=2041"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vielhuber.de\/ta\/wp-json\/wp\/v2\/tags?post=2041"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}