Laravel Eloquent Relationsships

  • Hey,

    wie der TItel schon aussagt bräuchte ich Hilfe bei einem bzw zwei Model in meiner Laravel App. Eigentlich ein Kinderspiel aber aus irgendeinem Grund habe ich den Überblick verloren und würde mich freuen wenn mir kurz jemand beim denken helfen kann ->

    Ich habe 2 Models, Articles und Categorys - in der Article Tabelle .. wenn wunderst speichere ich alle Article .. in der Category Tabelle ebend alle Kategorien. Ich komme einfach nicht mehr dazu die 2 Tabellen so zu verbinden das ich zu jeder Categorys auch die entsprechenden Article dazu bekomme.

    Oft gesehen oft gemacht und dann vergessen .. vielleicht weiss jemand ne kurze Denkhilfe ;) <3

  • Meinst du eine hasMany bzw. belongsTo Relation?

    Da jetzt am Handy, Mal eben fix kopiert von mir:

    Code
        public function category(): BelongsTo
            {
                    return $this->belongsTo(Category::class);
                        }

    Dann könntest du in dem Fall einfach $post->category(); das Model der Kategorie erhalten bei einem post.

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Also die Abhängigkeit in den Modellen funktioniert das Problem was ich habe ist ich bekomme die Abfrage in die views nicht rein.

    Was ich aktuell versuche: Habe eine Seite auf der stehen ALLE Kategorien die es so gibt. Unabhängig von Post Type also egal ob es ein Artikel ist oder eine Referenz zb. Jetzt rufe ich die Seite auf: http://www.example.de/categorys/{slug} .. sagen wir als Slug einfach mal allgemein.

    Lara geht also los und schau ob sie den Slug in der Kategorie Tabelle finden kann wenn ja dann soll sie mir bitte

    Kategorienamen -> Beschreibung

    Post 1

    Post 2

    anzeigen.

    Laut meinem Screenshot stimmt meine Abfrage aber ich bekomme keinen Zugriff auf die Daten .. entweder gibt er mir einen Eloquent Fehler aus oder zeigt null an .. :(

    Danke für deine Hilfe ;)

    Nachtrag um 21:27 Uhr:

    Code
    <x-app-layout>
        <div class="bg-primary-c p-4 border border-primary-custom" id="articles_wrapper">
            <h1>{{ __('categorys.PageTitle') }}</h1>
            <section class="content">
                @foreach($categorys as $category)
                    {{ $category->name }}
                @endforeach
            </section>
        </div>
    </x-app-layout>

    Das ist meine Bladeview .. erstmal nur so weit das ich quasi den Kategorie Namen hinbekomme aber selbst den gibt er mir nicht aus!

    Controller:

    Code
    $categorys = Category::with('articles')->where('slug',$slug)->first();
    //dd($categorys);
    return view('categorys.show',compact('categorys'));

    Ich denke das der Fehler in der Abfrage liegt .. :(

  • Ich hab gerade noch etwas Probleme dein Anliegen wohl zu verstehen.

    Willst du eine Übersicht wo alle Kategorien aufgelistet sind? Oder meinst du das du alle Artikel die der Kategorie zugewiesen sind haben willst?

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Ich gehe jetzt einfach von dem Teil des Codes aus den ich kenne:

    PHP
    @foreach($categories->posts())
       // Deine Template Code
    @endforeach

    Kleiner Tipp übrigens, mit @lang gibt's auch eine Blade Direktive für i18n :)

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • Achsoooo meinst du das :D haha ja das stimmt .. ich sitze aber wie gesagt schon seit Tagen an dem Code und klatsche den da grade so rein. Muss später nochmal drüber und alles ändern was mist aussieht.

    Hast recht aber am ende des tages ist wichtig das es übersetzt wird :D Danke für den Tipp ;)

    Hier findet ihr die Lösung und falls es dazu Fragen gibt einfach im Forum ein neues Thema eröffnen. DANKE an Syntafin für die Denkstütze :) https://gist.github.com/evarioooo/a4ee…be7cf3a32928ace

  • Kleiner Tipp übrigens, für deinen Controller, sieht schöner aus und ist einfacher zu warten:

    PHP
    public function show(ArticleCategorys $category)
    {
      
    	return view('categorys.show', [
    		'categories' => $category
    	]);
    }

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • compact() ist eher dafür gedacht mehrere Arrays zu Gruppieren.

    Ja dadurch kann man mit einem Aufruf auch eben mehrere Objects und Arrays an eine View übergeben, macht sich damit aber auch den Code schwerer lesbar, da man zB nicht bestimmen kann unter welcher Variable etwas im View verfügbar wird bzw. man fügt einen weiteren Cast der Attribute evtl. durch (Object -> Array zB).

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • NetzUnity 24. Mai 2024 um 13:00

    Hat das Thema geschlossen.
  • NetzUnity 24. Mai 2024 um 15:35

    Hat das Label Erledigt hinzugefügt.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!