试图在Laravel关系中获得非对象的属性

时间:2016-10-13 18:08:28

标签: laravel laravel-5 eloquent laravel-5.2

我的数据库中有两个表,一个Articles表和一个Users表。文章由用户发布,并且存在名为“created_by”的外键,引用Users表中的“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

似乎是$ article-&gt; user-&gt; first_name我遇到了麻烦。如果我单独输入$ article-&gt; user,页面将加载但该区域中不会显示任何内容。

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

3 个答案:

答案 0 :(得分:0)

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

在return语句前放一个dd($articles),你会看到你实际处理的是什么。

答案 1 :(得分:0)

Error in ifelse((master_strat_vect[13 * j]) >= cutoff_coop_ratio, c(valuable_strat_vect,  : 
  replacement has length zero
In addition: Warning message:
In rep(no, length.out = length(ans)) :
  'x' is NULL so the result will be NULL

编辑 尝试检查视图中$ article-&gt; user是否为null,因为如果没有为文章分配用户,那么您将“尝试获取非对象属性”错误

请在访问用户数据时进行额外检查。

{{$ article-&gt; user!== null? $ article-&gt; user-&gt; first_name:'User Not Found'}}

也为用户照片执行此操作

答案 2 :(得分:0)

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

<?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');

    }
}