Отображение объекта с помощью Eloquent

Привет! Я читал учебное пособие и получил вопрос об отображении в моем представлении объекта с именем перечисление .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

Решение

Я всегда использую троичный оператор:

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

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

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

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]