在我的blade.php中,假设帖子用户是登录用户
@foreach($posts as $post)
{{$user = App\User::find($post->user_id)}}
{{$user}}
{{Auth::user()}}
@endforeach
页面输出:
{"user_id":"123","email":"123@com","password":"1234","first_name":"Tony"}
{"user_id":"123","email":"123@com","password":"1234","first_name":"Tony"}
{"user_id":"123","email":"123@com","password":"1234","first_name":"Tony"}
如果我想只获取first_name
我改变了
{{Auth::user()}}
至{{Auth::user()->first_name}}
我可以得到" Tony"
但如果我改变了
{{$user}}
至{{$user->first_name}}
我收到了错误
"试图获得非对象的属性" (查看:C:\ PathToProject \ resources \ views \ dashboard.blade.php)
答案 0 :(得分:2)
您误解了Laravel Blade中双重大括号语法的作用。当它预处理视图时,它会有效地将它们转换为这样的echo语句:
echo
你不能像你在那些大括号中那样做分配逻辑,因为return view('dashboard', [
'user' => App\User::find($post->user_id)
]);
不是标准函数,draft standard并且不会那样工作
建议的方法是在控制器中获取该值并将其传递给您的视图。类似的东西:
<?php $user = App\User::find($post->user_id); ?>
如果您绝对需要在视图中获取它(不推荐),那么您将不得不回退到普通的旧PHP:
$posts = Post::withUser()->get();
然后你可以访问它。
修改强>
如果每个帖子都有用户,您应该在收到帖子时使用it is a language construct来吸引用户。类似的东西:
function scopeWithUser($query)
{
return $query->leftJoin('users', 'users.id', '=', 'posts.user_id');
}
您的范围可能类似于:
{{1}}
答案 1 :(得分:0)
你可以使用这个“黑客”
@foreach($posts as $post)
{{--*/ $user = App\User::find($post->user_id); /*--}}
{{$user->first_name}}
{{Auth::user()}}
@endforeach