2017-03-08 5 views
0

Ich habe diese Beziehung in einem meiner Modellklassen:NULL von eloquenter Beziehung zurückgeben?

public function userLike() 
{ 
    if (Auth::check()) return $this->hasOne('App\Like')->where('user_id', Auth::user()->id); 

    // RETURN NULL IF RECORD DOESN'T EXIST? 
} 

Wie Sie sehen können, überprüft er, ob der Benutzer angemeldet ist und gibt den Like Rekord. Wie kann ich jedoch null zurückgeben, wenn der Datensatz nicht existiert?

Ich versuchte dies:

public function userLike() 
{ 
    if (Auth::check()) return $this->hasOne('App\Like')->where('user_id', Auth::user()->id); 

    return null; 
} 

Aber ich bekomme die Fehlermeldung:

local.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to a member function addEagerConstraints() on null' in /var/www/social/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Builder.php:680

Als Seite Frage, bin ich dieses Recht zu tun? Ist dies der richtige Weg, oder gibt es einen besseren Weg?

Antwort

1

Ich bin mir nicht sicher! Aber ich denke, es ist möglich zu zählen! Wenn es 0 zurückgibt, wissen Sie, dass es keine Datensätze gibt, sodass Sie null zurückgeben können.

0

Ich bin nicht sicher, dass es der richtige Weg ist, dies zu tun. In Ihrem Modell sollten Sie nur Ihre Beziehungen erklären:

public function userLike() 
{ 
    return $this->hasOne('App\Like'); 
} 

Und dann in einem Controller oder etwas, das Sie wie diese erhalten, die wie Ihres Benutzer gehen:

class LikesController extends Controller { 

    public function getLike() 
    { 
     $like = null; 
     if (Auth::check()) { 
      $like = Like::where('user_id', Auth::user()->id)->first(); 
     } 
    } 
} 

So haben wir eine getLike() Funktion, die erhalten das gleiche wie ein Benutzer aus Ihrem Modell Like, wobei die user_id gleich der authentifizierten Benutzer-ID ist.

Hoffe es hilft!