2015-09-09 3 views
11

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

Модели

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']; 

    } 

схемы

стол users

enter image description here

стол news

enter image description here

Контроллер

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 в моем столе и модель User. Я что-то упускаю?

+0

Можете ли вы 'print_r ($ article);'? – aldrin27

+0

@ aldrin27 print_r прямо в моем контроллере? ну на самом деле все работает, я получаю все поля, но я не могу получить отношение. Это дает мне ошибку – FewFlyBy

+0

Вам нужно сделать так, чтобы внутри вашего лезвия. – aldrin27

ответ

23

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

+0

Спасибо. Это работает, и я должен добавить второй параметр в свой список принадлежит модели News. – FewFlyBy

+0

Tahnks много: DDD –

7

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

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

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

0

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

Смежные вопросы