2014-09-21 5 views
0

Привет Я следовал учебник, и я получил вопрос об отображении объекта, на мой взгляд, называемый listing.blade.phpОтображение объекта с красноречивых

@extends('layouts.default') 
@section('content') 
    @foreach($posts as $post) 
     <h1>{{{$post->title}}} By {{{$post->user->email }}}</h1> 
    @endforeach 
@stop 

Однако этот код не работает, потому что я получаю ошибка:

Trying to get property of non-object. 

Причина, по которой я получаю эту ошибку, заключается в том, что переменная $ post представляет собой массив.

Так что этот код делает работу:

<h1>{{{$post->title}}} By {{{$post->user['email'] }}}</h1> 

Но я не хочу использовать код обозначения выше меня. Я хотел бы использовать это:

<h1>{{{$post->title}}} By {{{$post->user->email }}}</h1> 

Вот код моего контроллера называется PostController.php:

<?php 

class PostController extends BaseController { 
    public function listing(){ 

     $posts = Post::all(); 

     return View::make('post/listing', compact('posts')); 
    } 
} 

А вот код моей модели называется Post.php:

<?php 

class Post extends \Eloquent { 

/*this holds all the fields that you can actually sit through 
mass assignment */ 
    protected $fillable = ['title', 'body']; 

//we set a field 'user_id' that we don't want to be set through mass assignment. 
// protected $guarded = ['user_id']; 

    public function user(){ 
     return $this->belongsTo('User'); 
    } 
} 

Также здесь код моей модели называется User.php (потому что это имеет отношение с post.php):

<?php 

use Illuminate\Auth\UserTrait; 
use Illuminate\Auth\UserInterface; 
use Illuminate\Auth\Reminders\RemindableTrait; 
use Illuminate\Auth\Reminders\RemindableInterface; 

class User extends Eloquent implements UserInterface, RemindableInterface { 

    use UserTrait, RemindableTrait; 

    /** 
    * The database table used by the model. 
    * 
    * @var string 
    */ 
    protected $table = 'users'; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = array('password', 'remember_token'); 

    public function posts(){ 
     return $this->hasMany('Post'); 
    } 
} 

Может кто-нибудь, пожалуйста, помогите мне с моим вопросом?

+0

Он должен работать как объект. –

+0

Да, я знаю, но это почему-то не так. Я действительно говорю правду. И если вы хотите, я могу записать себя, показывая этот код и вывод в моем браузере, если хотите. – superkytoz

+2

Я бы предположил, что у одного из 'posts' нет связанных' user' –

ответ

1

То, что я всегда делаю это использовать тройной оператор:

{{{ $post->title ?: 'No Title' }}} 

Это эквивалентно:

isset($post->title) ? $post->title : 'No Title'; 

Таким образом, вы добавляете слой безопасности в случае, если вы что-то пропустили.

+1

'laravel Blade' предоставляет' {{{$ post-> title или 'No Title'}}} '. –

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