2016-11-23 14 views
0

Ich habe ein Laravel 5.2-Projekt, das gut funktioniert. Ich habe versucht, es zu Laravel 5.3 zu aktualisieren und es gab Fehler wie:Upgrade auf Laravel 5.3, "Aufruf zu undefinierter Methode Illuminate Database Query Builder" Fehler

BadMethodCallException in Builder.php Linie 2448: Call to undefined Methode Illuminate \ Database \ Abfrage \ Builder :: Freunde()

oder andere Methoden in meinem User.php Modell haben den gleichen Fehler. Zum Beispiel, wenn ich friends() in HomeController.php Kommentar ich habe:

BadMethodCallException in Builder.php Linie 2448: Call to undefined Methode Illuminate \ Database \ Abfrage \ Builder :: getNameOrUsername()

Diese meine ist User Modell:

<?php 

namespace Activentum\Models; 

use Activentum\Models\Status; 
use Illuminate\Auth\Authenticatable; 
use Illuminate\Database\Eloquent\Model; 
use Illuminate\Contracts\Auth\Authenticatable as AuthenticatableContract ; 

class User extends Model implements AuthenticatableContract 
{ 
    use Authenticatable; 

    protected $table = 'users'; 

    protected $fillable = [ 
     'username', 
     'email', 
     'password', 
     'first_name', 
     'last_name', 
     'location', 


    ]; 

    protected $hidden = [ 
     'password', 
     'remember_token', 
    ]; 


    public function getName() 
    { 
     if ($this->first_name && $this->last_name){ 
      return "{$this->first_name} {$this->last_name}"; 
     } 

     if ($this->first_name) { 
      return $this->first_name; 
     } 
     return null; 
    } 


    public function getNameOrUsername() 
    { 
     return $this->getName() ?:$this->username; 
    }  
    public function getFirstnameOrUsername() 
    { 
     return $this->first_name ?: $this->username; 
    } 
    public function getAvatarUrl() 
    { 
     return "https://www.gravatar.com/avatar/ 
     {{md5($this->email)}}?d=mm&s=40"; 
    } 



    public function statuses() 
    { 
     return $this->hasMany('Activentum\Models\Status', 'user_id'); 
    } 
    public function likes() 
    { 
     return $this->hasMany('Activentum\Models\Like', 'user_id'); 
    } 
    public function friendsOfMine() 
    { 
     return $this->belongsToMany('Activentum\Models\User', 
     'friends', 'user_id','friend_id');  
    } 

    public function friendOf() 
    { 
     return $this->belongsToMany('Activentum\Models\User', 
     'friends', 'friend_id', 'user_id');  

    } 

    public function friends() 
    { 
     return $this->friendsOfMine()->wherePivot('accepted', true)->get()-> 
      merge($this->friendOf()->wherePivot('accepted', true)->get()); 
    } 

    public function friendRequests() 
    { 
     return $this->friendsOfMine()->wherePivot('accepted', false)->get(); 
    }  


    public function friendRequestsPending() 
    { 
     return $this->friendOf()->wherePivot('accepted', false)->get(); 
    } 

    public function hasFriendRequestsPending(User $user) 
    { 
     return (bool) $this->friendRequestsPending()-> 
     where('id', $user->id)->count(); 

    } 

    public function hasFriendRequestsReceived(User $user) 
    { 
     return (bool) $this->friendRequests()->where('id', $user->id)->count(); 
    } 

    public function addFriend(User $user) 
    { 
     $this->friendOf()->attach($user->id); 
    } 

    public function deleteFriend(User $user) 
    { 
     $this->friendOf()->detach($user->id); 
     $this->friendsOfMine()->detach($user->id); 
    } 

    public function acceptFriendRequest(User $user) 
    { 
     $this->friendRequests()->where('id', $user->id)->first() 
     ->pivot->update(['accepted'=> true, ]); 
    } 

    public function isFriendWith(User $user) 
    { 
     return (bool) $this->friends()->where('id', $user->id)->count(); 
    } 
    public function hasLikedStatus(Status $status) 
    { 
     return (bool) $status->likes 
     ->where('user_id', $this->id)->count(); 

    } 
} 

Und mein HomeController:

<?php 
    namespace Activentum\Http\Controllers; 

    use Auth; 
    use Activentum\Models\Status; 

    class HomeController extends Controller 
    { 

    public function index() 
    { 
     if (Auth::check()) { 
      $statuses = Status::notReply()->where(function($query){ 
       return $query->where ('user_id', Auth::user()->id) 
       ->orWhereIn('user_id',Auth::user()->friends()->pluck('id') 
        ); 
      }) 
      ->orderBy('created_at','desc')-> 
      paginate(14); 

      return view ('timeline.index') 
       ->with('statuses', $statuses); 
     } 

     return view('home'); 
    } 

} 

Es scheint, dass das Projekt das Modell nicht sehen kann. Meine Modelle befinden sich im Modellordner unter app/Models.

Antwort

1

Sie müssen Ihre config/auth.php Datei aktualisieren, um das korrekte User Modell zu sehen. Bei einer Neuinstallation wird das Standardmodell \App\User unter app/User.php angezeigt. Sie müssen den Schlüssel model in Ihrer Auth-Konfiguration aktualisieren, um Ihr benutzerdefiniertes Modell \App\Models\User unter app/Models/User.php zu sehen.

+0

I aktualisiert config/auth.php, config/services.php und /database/factories/ModelFactory.php und geändert Activentum\User zu Activentum\Models\User und es funktioniert jetzt. – mrmrn

Verwandte Themen