提问者:小点点

尝试获取Laravel关系中非对象的属性


我的数据库中有两个表,一个文章表和一个用户表。用户发布文章,并且存在一个名为created_by的外键,该外键引用用户表中的user_id字段。

我的Laravel模型如下所示:

用户模型

class User extends Model
{
   use Notifiable;

   protected $primaryKey = 'user_id';

   public function articles()
   {
       return $this->hasMany('App\Article', 'created_by', 'user_id');
   }

}

文章模式

class Article extends Model
{

   protected $primaryKey = 'article_id';

   public function user()
   {
       return $this->belongsTo('App\User', 'created_by' 'user_id');
   }

}

我有一个视图仪表板,显示所有的文章和发布它的人的名字和他们的图像。

仪表板控制器

<?php

namespace App\Http\Controllers;

use App\User;
use App\Article;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class DashboardController extends Controller
{
    public function index (Request $request) 
    {
        if($request->session()->get('username')) {

            $articles = Article::all();

            return view('dashboard', compact('articles'));

        }
        else
            return redirect('login');

    }
}

最后,在我的视图部分,我得到了“尝试获取非对象的属性”错误。

@foreach($articles as $article)
        <div class="row">
            <div class="col-lg-1"></div>
                <div class="col-lg-9">
                    <div class="panel panel-info">
                        <div class="panel-heading">
                            <h3 class="panel-title">{{ $article->title }}                                    </h3>
                        </div>
                        <div class="panel-body">
                            <p>
                            {{ $article->content }}
                            <br><br> - {{ $article->user->first_name }}
                            </p>
                        </div>
                    </div>
                </div>
            <div class="col-lg-1"><center><br><br>
                <img src="{{ asset('images/people/$article->user->image') }}" class="img-circle" alt="Person"></center>
            </div>
        </div><br><br>
    @endforeach

似乎是那篇$1的文章-

任何想法,我在过去的两个小时里一直在寻找解决方案。


共3个答案

匿名用户

我认为您需要指定希望用户加载文章,比如$articles=Article::with('user')-

在返回语句之前删除一个dd($文章),您将看到您实际上在处理什么。

匿名用户

$articles = Article::with('user')->get();

编辑尝试检查也如果$文章-

所以当你访问用户的数据时,要进行额外的检查。

{{$文章-

对用户照片也这样做

匿名用户

请编辑您的控制器,请标记为已回复thx。

<?php

namespace App\Http\Controllers;

use App\User;
use App\Article;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class DashboardController extends Controller
{
    public function index (Request $request, Article $articles) 
    {
        if($request->session()->get('username')) {               

            return view('dashboard')->with('articles', $articles->all() );

        }
        else                
            return redirect('login');

    }
}