将两个集合折叠为laravel中的一个

时间:2017-05-23 14:29:55

标签: laravel collections

我需要帮助来折叠我的收藏品。 它是我的代码

public function showFriends(){
            $request1 = DB::table('friends_users')
                ->join('users', 'users.id', '=', 'friends_users.user_id')
                ->where([['friend_id', '=',Auth::user()->id],['accepted', '=',true]])
                ->orWhere([['user_id','=',Auth::user()->id],['accepted','= ',true]])
                ->get();

                $request2 = DB::table('friends_users')
                ->join('users', 'users.id', '=', 'friends_users.friend_id')
                    ->where([['user_id','=',Auth::user()->id] , ['accepted','=',true]])
                    ->get();

                    $all = collect($request1,$request2)->collapse();
        return $all;

    }

问题在$ all变量中,因为它返回空集合。谢谢你的帮助。

3 个答案:

答案 0 :(得分:2)

对集合使用合并方法:

 $all = $request1->merge($request2);

答案 1 :(得分:0)

你可以试试这个

$collection = collect($request1,$request2);
$collapsed = $collection->collapse();

答案 2 :(得分:0)

您也可以使用union

在一个查询中执行此操作
public function showFriends(){
    $query1 = DB::table('friends_users')
        ->join('users', 'users.id', '=', 'friends_users.user_id')
        ->where([['friend_id', '=',Auth::user()->id],['accepted', '=',true]])
        ->orWhere([['user_id','=',Auth::user()->id],['accepted','= ',true]]);

    $request = DB::table('friends_users')
        ->join('users', 'users.id', '=', 'friends_users.friend_id')
        ->where([['user_id','=',Auth::user()->id] , ['accepted','=',true]])
        ->union($query1)
        ->get();


    return $request;
    return $request->all(); // If you want an array rather than collection
}

Laravel Documentation on unions

  

查询构建器还提供了一种快速的方式来实现" union"两个问题   一起。例如,您可以创建初始查询并使用   union方法将它与第二个查询结合起来