Laravel无法在数组中获取项目

时间:2016-08-04 15:24:35

标签: php laravel blade laravel-blade

在我的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)

2 个答案:

答案 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