升级到 Laravel 5.3,"Call to undefined method IlluminateDatabaseQueryBuilder"错误



我有一个很棒的laravel 5.2项目。我试图将其升级到Laravel 5.3,并给出了以下错误:

builder.php行2448中的badmethodcallexception:致电到未定义的方法照明 database query builder builder :: friends()

或我的User.php模型中的任何其他方法都有相同的错误。例如,当我在HomeController.php中评论friends()时,我有:

builder.php行2448中的badmethodcallexception:致电到未定义的方法照明 database query builder builder :: getNameorusername()

这是我的User模型:

<?php
namespace ActiventumModels;
use ActiventumModelsStatus;
use IlluminateAuthAuthenticatable;
use IlluminateDatabaseEloquentModel;
use IlluminateContractsAuthAuthenticatable 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('ActiventumModelsStatus', 'user_id');
    }
    public function likes()
    {
        return $this->hasMany('ActiventumModelsLike', 'user_id');
    }
    public function friendsOfMine()
    {
        return $this->belongsToMany('ActiventumModelsUser',
         'friends', 'user_id','friend_id');    
    }
    public function friendOf()
    {
        return $this->belongsToMany('ActiventumModelsUser',
         '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();
    }
}

和我的HomeController

<?php
    namespace ActiventumHttpControllers;
    use Auth;
    use ActiventumModelsStatus;
    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');
    }
}

看来项目看不到模型。我的模型位于app/Models中的模型文件夹中。

您需要更新config/auth.php文件才能查看正确的User模型。新的安装将查看位于app/User.php上的默认AppUser型号。您需要更新Auth配置中的model密钥,以查看位于app/Models/User.php的自定义AppModelsUser模型。

相关内容

最新更新