我的数据库中有两个表,一个文章表和一个用户表。用户发布文章,并且存在一个名为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的文章-
任何想法,我在过去的两个小时里一直在寻找解决方案。
我认为您需要指定希望用户加载文章,比如$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');
}
}