Follow-System für eine Multi-Auth-Anwendung

  • Hallo zusammen:)


    Ich habe eine Laravel-Anwendung gebastelt, in der man sich als

    • Blogger (in der Anwendung User genannt)
    • Besucher (in der Anwendung Customer genannt)

    registrieren kann.


    Die beiden Bereiche haben neben getrennten Log-Ins auch komplett unterschiedliche Funktionen und Verbindungen zu unterschiedlichen Datenbanken Tabellen. Also nicht nur unterschiedliche Rollen, wie sich z.B. Standard- und Premium-Accounts unterscheiden.

    So soll der Blogger/User z.B. einen Beitrag (in der Anwendung offer genannt) erstellen können.

    Der Besucher/Customer soll den Beitrag (in der Anwendung offer genannt) nicht erstellen, sondern nur "liken" bzw. "folgen" können.


    Nun habe ich versucht eine Verbindung zwischen der customer_id und der offer_id über eine Morph-Tabelle zu erzeugen, um ein "Like" eines Besuchers zu einem Beitrag eines Bloggers zu speichern.

    Leider kann ich aktuell einen Beitrag nur als Blogger/User von einem anderen Blogger/User "liken" bzw. "folgen".

    Die Verbindung zwischen offer_id und user_id funktioniert also.

    Versuche ich hingegen den Beitrag (offer_id) mit der customer_id zu verbinden erscheint folgende Fehlermeldung.


    "Method Illuminate\Auth\SessionGuard::customer does not exist."


    Für alle Hinweise bzw. Tipps, die dazu beitragen das Problem zu lösen, wäre ich sehr dankbar. Falls ich das Problem noch nicht verständlich/umfassend/ ... genug dargestellt habe, fragt gerne nach:).


    LG

    Vince

    Einmal editiert, zuletzt von Vince () aus folgendem Grund: Falsche/ Irreführende Beschreibung verbessert (Tabellen statt Datenbanken)

  • 4 Models sind in dem Thema involviert.

    1. User (hasMany->offers)

    2. Customer (hasMany->offers)->obwohl ein Customer selbst kein offer erstellen kann

    3. Subscription (also Like bzw. Follow)->(belongsTo->user & belongsTo->customer)

    4. Offer (belongsTo->User &belongsTo->customer & morphTo->Subscripton)

  • Okay, eigentlich ganz einfach:)


    Das Subcription Model bekommt ein Boolean:

    Code
    $table->boolean('subcription')->default(0);
    $table->foreignId('user_id');
    $table->foreignId('customer_id');

    In deiner User und Customer Model:

    Code
    $table->unsignedBigInteger('subcription_id')

    Deine Relationsships stimmen.


    Code
    $customer = Customer::all()->with('subcription',1);
  • Vielen Dank schon mal für deine Hilfe.

    Wo gehört denn der letzte Teil ($customer = Customer::all()->with('subscription',1); hin?


    Meine subscription table sah bisher so aus. Wobei die offer_id in subscribable und die customer_id in customer_id gespeichert wird.

    Code
    $table->bigIncrements('id');
    //$table->unsignedInteger('user_id')->nullable();
    $table->unsignedInteger('customer_id')->nullable();
    $table->morphs('subscribable');
    $table->timestamps();
    $table->unique(['user_id', 'subscribable_type', 'subscribable_id']);

    Und mein Offer Model sieht so aus:


    Sodass ich dann im SubscriptionController das so toggeln kann:

    Code
    if ($offer->isSubscribed()){
    $offer->unsubscribe();
    }else {
    $offer->subscribe();
    }
  • Uii, jetzt müssen wir aber von vorne anfangen, um zu verstehen was du möchtest;)

    Da ist zu viel durcheinander.

    Also ein User kann Beiträge schreiben. Und ein Customer darf nur Beiträge einen Like geben?

  • User:

    Kann über die create-Method im OffersController einen Beitrag erstellen. Über die index-Method eine Übersicht über alle Beiträge erhalten.

    Über die show-Method im OffersController wird der jeweilige Beitrag (besteht im Groben aus Titel, Texteil und Like-Button) einzeln angezeigt.


    Customer:

    Kann Beiträge ansehen und sie auf eine Watchlist setzen (Like) sowie User-Profilen folgen. Profilen folgen sollte dann wohl auch dem gleichen Muster folgen wie das Hinzufügen auf die Watchlist.

  • Unter "Folgen" verstehe ich die Subcribe Methode von Youtube. Unter "Like", das "Liken" bei Youtube:)

    Das bedeutet:

    Ich kann einen User->Folgen.

    Einen Beitrag/Post/Video/Comment->Liken.


    Es ist schon spät, habe erst Sonntag wieder mehr Zeit. Falls du es hinbekommst, poste es einfach hier. Ansonsten können wir das alles Step by Step sauber umsetzen.

  • OK. Besten Dank bis hierhin :).

    Wenn du das so definierst, dann ist Folgen sicher der bessere Ausdruck. Noch besser würde hier passen "Auf die Beobachtungsliste setzen" bei eBay. Beim Profil wäre Folgen dann der perfekte Ausdruck.

    Hatte selbst "Liken" bei FB und "Folgen" bei Twitter im Sinn.

    Das hört sich doch sehr gut an. Also wenn ich es bis dahin nicht fertig habe, bis Sonntag.:)