Мой код работал нормально.После установки Laravel Passport v7 (последняя версия этой статьи и, кстати, я использую Laravel v5.7 и последнюю версию), мой код больше не работает.Когда я пытаюсь запустить $user->role->id
, я получаю сообщение об ошибке
Попытка получить свойство 'id' не-объекта
Это потому, что мой $user->role
этоне возвращает объект модели Role, но вместо этого он возвращает null
, а перед установкой Laravel Passport он возвращает модель Role.Я не знаю, есть ли какие-либо связи, но я не хочу менять весь мой код из-за этого.Даже я пытался написать внутри своей модели User return $this->belongsTo(Role::class, 'role_id');
, но это также не работает.
вот мой код: Модель пользователя:
namespace App;
use App\Role;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function role()
{
return $this->belongsTo(Role::class);
}
}
Режим роли:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model
{
public function user()
{
return $this->hasMany(User::class);
}
}
Схема таблицы пользователя:
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('email', 250)->unique();
$table->string('password');
$table->string('phone', 11)->nullable();
$table->integer('role_id')->unsigned()->default(1);
$table->string('api_token', 60)->unique();
$table->rememberToken();
$table->timestamps();
});
Схема таблицы роли:
Schema::create('roles', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->timestamps();
});
HomeController:
<?php
namespace App\Http\Controllers;
use App\Product;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$user = \Auth::user();
$products = new Product;
// here i am getting the error
if ($user->role_id > 2) {
$products = Product::where('name', '!=', NULL)->latest()->paginate(6);
} else {
$products = $products->getApprovedAndUntaken();
}
return view('welcome', compact('products'));
}
public function home()
{
return view('home');
}
}