Php 升级至laravel 5.3“版本;调用undefined method\Database\Query\Builder";错误
我有一个Laravel 5.2项目,效果很好。我尝试将其升级到Laravel 5.3,但出现以下错误: Builder.php第2448行中的BadMethodCallException:调用未定义的方法Illumb\Database\Query\Builder::friends() 或者我的Php 升级至laravel 5.3“版本;调用undefined method\Database\Query\Builder";错误,php,laravel,laravel-5,eloquent,laravel-5.3,Php,Laravel,Laravel 5,Eloquent,Laravel 5.3,我有一个Laravel 5.2项目,效果很好。我尝试将其升级到Laravel 5.3,但出现以下错误: Builder.php第2448行中的BadMethodCallException:调用未定义的方法Illumb\Database\Query\Builder::friends() 或者我的User.php模型中的任何其他方法都有相同的错误。 例如,当我在HomeController.php中评论friends()时,我有: Builder.php第2448行中的BadMethodCallEx
User.php
模型中的任何其他方法都有相同的错误。
例如,当我在HomeController.php
中评论friends()
时,我有:
Builder.php第2448行中的BadMethodCallException:调用未定义的方法\Database\Query\Builder::getNameOrUsername()
这是我的用户
型号:
<?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();
}
}
project似乎看不到模型。我的模型位于
app/models
的models文件夹中,您需要更新config/auth.php
文件以查看正确的用户
模型。新安装将查看位于App/User.php
的默认\App\User
模型。您需要更新身份验证配置中的模型
键,以查看位于App/Models/User.php的自定义\App\Models\User
模型I updatedconfig/auth.php
,config/services.php
和/database/factories/ModelFactory.php
并将Activentum\User
更改为Activentum\Models\User
,现在可以使用了。
<?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');
}
}