一个foreach语句laravel中的两个变量

时间:2016-07-07 10:22:59

标签: php laravel

下面的第一个@foreach带来了创建帖子的用户。我需要输出为共享帖子的用户,该帖子由下面的第二个@foreach返回。

First Foreach:

@foreach ($friendShares as $friendShare)
<p> {{$friendShare->body}} by {{$friendShare->user->getname()}}</p> 
@endforeach

Second Foreach:

@foreach ($shares as $shares)
<p> {{$shares->user->getname()}}</p> 
@endforeach

我的问题是,将{{$ shares-&gt; user-&gt; getname()}}集成到@foreach($ friendShares as $ friendShare)中的正确语法是什么,可能是这样的:

@foreach ($friendShares as $friendShare , $shares as $shares )
<p> {{$friendShare->body}} by {{$shares->user->getname()}}}}</p> 

3 个答案:

答案 0 :(得分:0)

我认为不可能在一个foreach中检查两个数组,但是你可以执行以下操作:

@for ($i = 0;$i < min([count($friendShares),count($shares)]);$i++)
   <p> {{array_values($friendShares)[$i]->body}} by {{array_values($shares)[$i]->user->getname()}}}}</p> 

这应该可以达到你想要的效果。

答案 1 :(得分:0)

你总是可以使用两个嵌套的foreach ....来存储某些变量中的所有值

@foreach ($shares as $shares)
<p> <?php $shares_get_name = $shares->user->getname() ?></p> 
   @foreach($friendShares as $friendShare)
<p> {{$friendShare->body}} by {{$shares_get_name}}</p> 
@endforeach

我希望这就是你想要的......如果没有,请你详细说明你需要的整合

答案 2 :(得分:0)

我将控制器中的关系更改为查询,这对我来说更简单明了(但仍使用关系来获取$ myFriends列表):

控制器代码

5  five
4  four
3  three
2   two
1   one

查看代码:

        $myFriends = Auth::user()->friends()->lists('id');
        $sharedPosts = DB::table('shares')
            ->join('users', 'users.id', '=', 'shares.user_id')
            ->join('posts',  function($join){
                    $join->on('posts.id', '=', 'shares.post_id');                   
                })
            ->where('shares.user_id', '=', $myFriends) 
            ->get();

return view('profile.index')
        ->with('friendShares', $sharedPosts);