Попытка получить свойство не объекта - Laravel 5

Я пытаюсь повторить имя пользователя в моей статье, и я получаю ErrorException: Trying to get property of non-object. Мои коды:

Модели

1. News

    class News extends Model
    {
      public function postedBy()
      {
         return $this->belongsTo('App\User');
      }
      protected $table = 'news';
      protected $fillable = ['newsContent', 'newsTitle', 'postedBy'];
    }

2. User

    class User extends Model implements AuthenticatableContract,
                                AuthorizableContract,
                                CanResetPasswordContract
    {
        use Authenticatable, Authorizable, CanResetPassword;

        protected $table = 'users';

        protected $fillable = ['name', 'email', 'password'];

        protected $hidden = ['password', 'remember_token'];

    }

Схема

table users

введите описание изображения здесь

table news

введите описание изображения здесь

контроллер

public function showArticle($slug)
    {
        $article = News::where('slug', $slug)->firstOrFail();
        return view('article', compact('article'));
    }

Клинок

{{ $article->postedBy->name }}

Когда я пытаюсь удалить имя в лезвии {{ $article->postedBy }}, он выводит id, но когда я пытаюсь добавить имя → там, он говорит Trying to get property of non-object, но у меня есть поле name в моей таблице и a User. Я что-то пропустил?

Ответ 1

Является ли ваш запрос возвратом массива или объекта? Если вы сбросите его, вы можете обнаружить, что массив и все, что вам нужно, это доступ к массиву ([]) вместо доступа к объекту (- > ).

Ответ 2

Я заработал, используя ответ Джимми Зото и добавив второй параметр в мой belongsTo. Вот он:

Сначала, как предложил Джимми Зото, мой код в лезвии от $article->poster->name до $article->poster['name']. Далее следует добавить второй параметр в моем belongsTo, от return $this->belongsTo('App\User');, чтобы вернуть $this->belongsTo('App\User', 'user_id');, в котором user_id - мой внешний ключ в таблице новостей.

Спасибо за вашу помощь!

Ответ 3

Я применил отношение hasOne в моем родительском классе, определяющее как внешний, так и локальный ключ, он возвратил объект, но к ним нужно обращаться как к столбцам дочернего элемента. т.е. $parent->child['column']
Вид запутанности.

Ответ 4

Случилось так, что через некоторое время нам нужно бежать

 'php artisan passport:install --force 

снова сгенерировать ключ это решило мою проблему,

Ответ 5

Если вы работаете с циклами или (for, foreach и т.д.) Или отношениями (one to many, many to many и т.д.), Это может означать, что один из запросов возвращает переменную null или null участник отношений.

Например,: в таблице вы можете перечислить users с их roles.

<table>
    <tr>
        <th>Name</th>
        <th>Role</th>
    </tr>
    @foreach ($users as $user)
    <tr>
        <td>{{ $user->name }}</td>
        <td>{{ $user->role->name }}</td>
    </tr>
    @endforeach
</table>

В приведенном выше случае вы можете получить эту ошибку, если хотя бы один пользователь не имеет роли. Вам следует заменить {{ $user->role->name }} на {{ !empty($user->role) ? $user->role->name:'' }} следующим образом:

<table>
    <tr>
        <th>Name</th>
        <th>Role</th>
    </tr>
    @foreach ($users as $user)
    <tr>
        <td>{{ $user->name }}</td>
        <td>{{ !empty($user->role) ? $user->role->name:'' }}</td>
    </tr>
    @endforeach
</table>

Ответ 6

У меня была и эта проблема. Добавьте код, как показано ниже, в соответствующий контроллер (например, UserController)

$users = User::all();
return view('mytemplate.home.homeContent')->with('users',$users);

Ответ 7

Laravel необязательный() Помощник приходит, чтобы решить эту проблему. Попробуйте этот помощник, чтобы, если какой-либо ключ не имел значения, он не возвращал ошибку

foreach ($sample_arr as $key => $value) {        
      $sample_data[] = array(       
        'client_phone' =>optional($users)->phone        
      );
    }
 print_r($sample_data);