有两种型号,
用户
id,姓名,电子邮件等
注释
id,user_id,comment等
Comment Model
public function user()
{
return $this->belongsTo('App\User', 'user_id', 'id');
}
当我使用以下查询尝试控制器时,我可以获取用户的电子邮件地址
$comments = Comment::where('status',1)->orderBy('id', 'desc')->take(5)->get();
foreach ($comments as $comment){
return $comment->user->email;
}
但是,我没有成功,当我将以下内容写入Blade文件时出现错误。
@foreach($comments as $comment)
<a href="{{ $comment->user->email }}">
<img class="avatar" src="{{ $comment->user->photo }}"
data-at2x="{{ $comment->user->photo }}"
alt="{{ $comment->user->slug}}">
</a>
@endforeach
错误消息:尝试获取非对象的属性
我在等你的帮助,先谢谢。
答案 0 :(得分:0)
在评论模型中添加with
字段
class Comment extends Model
{
protected $with = [
'user'
];
protected $fillable = [
....
];
public function user (){
return $this->belongsTo('App\User' ,'user_id' ,'id' );
}
}
答案 1 :(得分:0)
你可以使用Lazy Eager with
$comments = Comment::with('user')->where('status',1)->orderBy('id', 'desc')->take(5)->get();
return view('YourViewPath/ViewFileName.blade.php',compact('comments'));
现在在您看来:
@foreach($comments as $comment)
<a href="{{ $comment->user->email }}">
<img class="avatar" src="{{ $comment->user->photo }}"
data-at2x="{{ $comment->user->photo }}"
alt="{{ $comment->user->slug}}">
</a>
@endforeach
答案 2 :(得分:0)
尝试使用条件。
@foreach($comments as $comment)
<a href="{{ $comment->user->email?$comment->user->email:'' }}">
<img class="avatar"
src="{{ $comment->user->photo?$comment->user->photo }}"
data-at2x="{{ $comment->user->photo }}"
alt="{{ $comment->user->slug?$comment->user->slug:''}}">
</a>
@endforeach
答案 3 :(得分:0)
我找到了你沮丧的原因。更确切地说,在http://forum.laravel.gen.tr/viewtopic.php?pid=12477#p12477 @mgsmus回复了我的朋友。
简单地说,我需要解释一下;某些评论者不在用户表中。
建议2种预防方法。 第一; 如果您获得非对象错误的try-to-get属性,则其中一个注释没有与任何User模型关联的记录,即其中一个为null。 在这种情况下,您可以使用optional()辅助函数。 (Laravel在5.5和5.6中可用,但也可以很容易地传递到5.4。)optional()辅助函数允许属性在对象为空时返回null,而不是错误,而不是非对象错误。 https://laravel.com/docs/5.6/helpers#method-optional
所以而不是$ comment-&gt;用户&GT;在刀片中输入电子邮件,输入可选($ comment-&gt; user) - &gt;电子邮件。其他是可选的($ comment-&gt; news) - &gt;链接和可选(可选($ comment-&gt;考试) - &gt;链接,这样您就可以看到哪条记录没有链接。
另一种方法是仅保留仅具有关联的记录: https://laravel.com/docs/5.6/eloquent-relationships(查询关系存在部分)
//有('user')确保我们对用户有5条评论。 //这与whereNotNull('user_id')不同,因为它会检查模型是否确实存在。 user_id可能已满,但我们不知道它是具有id的用户。
Comment :: has ('user') -> where ('check', 1) -> orderBy ('id', 'desc') -> take (5) -> get ();