#php #laravel
Вопрос:
Я использую Laravel 8 и у меня ошибка,
Если я зарегистрирую пользователя с помощью Laravel, он скажет:
Attempt to read property "avatar" on null
в представлениях по индексу пользователя и еще один работал правильно…
и если войти в систему с помощью Laravel, создав пользователя на страницах администратора, это говорит: These credentials do not match our records.
UsersController.php:
public function index() {
return view ('admin.users.index', ['users'=>User::all()]);
}
public function store(Request $request) {
//
$this->validate($request, [
'name' => 'required',
'email' => 'required',
'password' => 'required'
]);
$user = User::create([
'name' => $request->name,
'email' => $request->email,
'password' => bcrypt('password')
]);
$profile = Profile::create([
'user_id' => $user->id,
'avatar' => 'uploads/avatars/1.png'
]);
session()->flash('success', 'User berhasil ditambah');
return redirect()->route('users');
}
Я использовал <img src="{{asset(auth()->user()->profile->avatar)}}
или <img src="{{asset($user->profile->avatar)}}
в представлениях и тоже не работал.
Это таблица пользователей:
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->boolean('admin')->default(0);
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
Эта таблица профилей:
Schema::create('profiles', function (Blueprint $table) {
$table->id();
$table->string('avatar')->nullable();
$table->integer('user_id');
$table->text('about')->nullable();
$table->string('facebook')->nullable();
$table->string('youtube')->nullable();
$table->timestamps();
});
Модель пользователя
public function profile() {
return $this->hasOne(Profile::class);
}
Модель Профиля
public function user() {
return $this->belongsTo(User::class);
}
Ответ №1:
Эта ошибка
Попытка прочитать свойство «аватар» на null
указывает, что есть некоторые пользователи без профиля, и именно поэтому $user->profile
возвращает значение null, чтобы вы могли сделать его необязательным, используя условие if, подобное этому:
{{$user->profile !== null ? asset($user->profile->avatar) : asset('path-to-default-image')}}
Комментарии:
1. Наконец-то это работает… спасибо за ваш ответ :)… но когда я создаю пользователя на странице администратора и вхожу в систему с этим пользователем, произошла ошибка:
These credentials do not match our records
… связано ли это с отношениями между Пользователем и Профилем?2. Неважно, я решил эту проблему, проблема в пароле… я использую это:
'password' => Hash::make($request->password)
в UsersController вместо'password' => bcrypt('password')