试图获取非对象Laravel的属性“用户”

时间:2019-11-24 09:27:41

标签: laravel

我有一个错误,我不明白为什么得到它。 我在很多线程中搜索了此错误,但没有找到与我相对应的修复程序。

外观\点火\异常\ ViewException 试图获取非对象的属性“用户”

在模板刀片中的{{ $contact->messages->last()->user->name }}行上(请参见下面的提示)。

class Contact extends Model
{
    protected $fillable = [
        'user_id', 'title', 'status',
    ];

    public function messages()
    {
        return $this->hasMany('App\Models\ContactMessages', 'contact_id', 'id');
    }
}

class ContactMessages extends Model
{
    protected $fillable = [
        'contact_id', 'user_id', 'message', 'read',
    ];

    public function user()
    {
        return $this->hasOne('App\Models\User', 'id', 'user_id');
    }
}

class ContactController extends Controller
{
    public function index()
    {
        return view('contact.index')
            ->with('contact_list', Contact::where('user_id', Auth::user()->id)->latest()->paginate(10));
    }
}

// In my template view:
                @foreach($contact_list as $contact)
                  <tr>
                    <td>{{ $contact->id }}</td>
                    {{ dd($contact->messages->last()->user->name) }} // This display me the good result!
                    <td>{{ $contact->messages->last()->user->name }}</td> // This display me the Laravel error
                    <td>{{ $contact->created_at->diffForHumans() }}</td>
                    <td>{{ $contact->updated_at->diffForHumans() }}</td>
                  </tr>
                @endforeach

谢谢。

1 个答案:

答案 0 :(得分:0)

最常见的原因是此链中的某些内容为空。您可以使用if语句来防止错误。这是一种方法:

@if($contact->messages->last())
    @if($contact->messages->last()->user)
        {{ $contact->messages->last()->user->name }}
    @endif
@endif