2017-05-31 3 views
0

Ich wollte ein Follow-System implementieren, wo ein UserComment, Category, Post und mehr folgen kann. Ich habe versucht, Laravel Polymorphic Relationen dafür zu verwenden, konnte aber nicht meinen Kopf darum wickeln. Wenn mich jemand führen kann, wird es großartig.Laravel Benutzer können folgen Kommentar, Kategorie, Beitrag usw.

Hier ist was ich versucht habe.

Benutzermodell

public function categories() 
{ 
    return $this->morphedByMany(Category::class, 'followable', 'follows')->withTimestamps(); 
} 

Kategorie Model

public function followers() 
{ 
    return $this->morphMany(Follow::class, 'followable'); 
} 

Folgen Modell

public function followable() 
{ 
    return $this->morphTo(); 
} 

public function user() 
{ 
    return $this->belongsTo(User::class); 
} 

Folgen Migration

Schema::create('follows', function (Blueprint $table) { 
    $table->bigIncrements('id'); 
    $table->unsignedBigInteger('user_id'); 
    $table->morphs('followable'); 
    $table->timestamps(); 
}); 

Wie kann ich die ganze categories, comments von einem Benutzer gefolgt erhalten. Auch wie ich die Follower eines Cateogry oder Commets usw. bekommen kann

Bitte helfen.

Antwort

1

Sie brauchen nicht Follow Modell.
Alles, was Sie brauchen, ist Schraubbefestigung wie so

followable 
    user_id - integer 
    followable_id - integer 
    followable_type - string 

folowers Methode, um alle Klassen hinzufügen, die Sie benötigen

Zum Beispiel folgen
Kategorie Model

public function followers() 
{ 
    return $this->morphToMany(User::class, 'followable'); 
} 

dann in Benutzermodell

public function followers() 
{ 
    return $this->morphToMany(User::class, 'followable'); 
} 

public function followedCategories() 
{ 
    return $this->morphedByMany(Category::class, 'followable')->withTimestamps(); 
} 

public function followedComments() 
{ 
    return $this->morphedByMany(Comment::class, 'followable')->withTimestamps(); 
} 

public function followedPosts() 
{ 
    return $this->morphedByMany(Post::class, 'followable')->withTimestamps(); 
} 

// and etc 

public function followedStuff() 
{ 
    return $this->followedCategories 
     ->merge($this->followedComments) 
     ->merge($this->followedPosts); 
} 

Dann können Sie Ihr Ziel erreichen, indem sie zu den Nachfolgern von bestimmten Kategorie, Kommentar oder senden Sie zugreifen oder was auch immer Sie wollen (wenn es verfolgbare von courcse)
Zum Beispiel:

$folowers = $category->folowers; 
// will return all followers this category 
$all = $user->followedStuff(); 
// will return collection of all things followable by the user 
+0

nur noch eine Sache, Ich kann User-Follower von '$ user-> followers 'bekommen. Was ist mit User-Followings? Wie kann ich alle User erreichen, die einem User folgen? – Saqueib

Verwandte Themen