2017-02-11 4 views
1

Ich habe eine Like/Favoriten-Funktion in meiner Anwendung implementiert, wo ein Benutzer Favorit eine Charity - das ist dann in einer Tabelle in meiner Datenbank gespeichert - das ist einigermaßen gut funktioniert.Wie wird die Liste "Favoriten/Likes" in Laravel 5.3 ausgegeben?

Wie würde ich die Benutzer-Favoritenliste auf ihrer Profilseite an sie ausgeben?

Profil ansehen (Wo ich ausgeben wollen):

<div class="favourite_section"> 

<div class="col-md-5 pull-right"> 

    <div class="panel panel-default"> 

    <div class="panel-heading"> 

     <a href="#" class="pull-right"> Edit </a> 

     <h3 class="panel-title"> Your Favourites </h3> 

    </div> 

     <div class="panel-body"> 

     <!-- Output users' favourites. --> 

      <h4> </h4> 

     </div> 

    </div> 

</div> 

Wie Controller:

<?php 

namespace App\Http\Controllers; 
use App\Like; 
use Illuminate\Support\Facades\Auth; 

class LikeController extends Controller 
{ 
public function likePost($id) 
{ 
    $this->handleLike('App\charity', $id); 
    return redirect()->back(); 
} 

public function handleLike($type, $id) 
{ 
    $existing_like = Like::withTrashed()->whereCharityImg($type)->whereCharityDesc($type)->whereCharityName($type)->whereCharityId($id)->whereUserId(Auth::id())->whereId($id)->first(); 
    if (is_null($existing_like)) 
    { 
     Like::create([ 
      'id'  => $id, 
      'user_id' => Auth::id(), 
      'charity_id' => $id, 
      'charity_name' => $type, 
      'charity_desc' => $type, 
      'charity_img' => $type 
     ]); 

    } 
    else 
    { 
     if (is_null($existing_like->deleted_at)) 
     { 
      $existing_like->delete(); 
     } 

     else 
     { 
      $existing_like->restore(); 
     } 
    } 
} 
} 

Antwort

1

Sie sind in der Lage, die aktuell angemeldeten Benutzer mit Laravel's Authentication Facade oder abrufen wenn Sie Helfer bevorzugen, auth()->user(). In ähnlicher Weise können Sie Auth::id() ausführen, um das Objekt zu überspringen und die ID des Benutzers direkt abzurufen. In Ihrem Controller, sollten Sie das Wie Modell abfragen, wo die user_id der wie die Benutzer-ID der angemeldeten Benutzer gleich ist:

$likes = Like::whereUserId(Auth::id())->get(); 

Dies wird eine Sammlung von Leuten zurück, die übergeben werden sollen der Blick von der Steuerung, etwa so:

return view('profile', compact('likes')); 

Ersetzen ‚Profil‘ mit dem, was die Ansichtsdatei für die Profilseite. Dann haben Sie in der Blade-Vorlage Zugriff auf eine $ likes-Variable, über die Sie iterieren können:

@foreach($likes as $like) 
    // Do what you want with each like 
@endforeach 
0

Ihre Situation heißt viele zu viele Beziehung.

Laravel docs

Laravel macht es einfach. Sie sollten eine Methode für Sie schreiben. Etwas wie:

public function favourites() { 
    return $this->belongsToMany('App\Charity', '[Like model table name]', 'user_id', 'charity_id'); 
} 

Sie können dann verwenden Sie es mögen: $user->favourites und es wird Sammlung von Lieblings gemeinnützige Organisationen zurück.

Sie können Dokumente lesen, wenn Sie möchten.