Как использовать множественные отношения в laravel 5.4

#php #laravel

#php #laravel

Вопрос:

В моем приложении у меня есть define relationship (профиль, пользователь, уровень), но когда я извлекаю данные, отображается ошибка ( Trying to get property 'email' of non-object ) как я могу решить эту проблему, заранее благодарю.

это пользовательская модель

 public function profile()
{
     return $this->hasOne(Profile::class, 'user_id');
}
  

Модель профиля

 public function user()
{
    return $this->belongsTo(User::class, 'id');
}
public function level()
{
   return $this->belongsTo(Level::class, 'id');
}
  

Модель уровня

 public function profile()
{
  return $this->hasOne(Profile::class, 'level_id');
}
  

Это контроллер ProfileController

 $users = Profile::with(['user', 'level'])->where('is_bd_partner', 'Yes')->get();
        foreach ($users as $key => $value) 
        {
            echo $value->first_name.'<br>';
            echo $value->last_name.'<br>';
            echo $value->user->email.'<br>';
            echo $value->level->level.'<br>';
        }
  

Комментарии:

1. можете ли вы показать вывод $users : dump($users); пожалуйста, перед foreach?

2. это дамп пользователя prntscr.com/my9awu

3. я использую один фреймворк laravel

4. Пожалуйста, не могли бы вы показать миграцию / структуру таблиц для моделей?

Ответ №1:

Обратите внимание, что belongsTo принимает foreign_key в качестве первого параметра. Итак, вам следует изменить модель профиля следующим образом

 public function user()
{
    return $this->belongsTo(User::class, 'user_id');
}
public function level()
{
   return $this->belongsTo(Level::class, 'level_id');
}
  

Подробнее здесь