Foreach循环运行一次查询

时间:2019-01-05 05:33:05

标签: php database laravel

我已经花了数小时,却找不到解决方法,我有一个查询,该查询获取所有在被请求方或入站部分具有个人资料ID的朋友,并检查其是否获得批准,这部分是否正确,就好像我回显查询,它返回所有正确的行,现在,当我要遍历每一行并在数据库中搜索与好友表中被请求者ID或入站ID相关的用户时,当前它仅循环一次,我在循环$rowsget$temp1时都知道这一点,而$temp1中的用户名仅与$rowsget的第一行相关。我的头快要爆炸了,任何帮助都将不胜感激。

查询

$rowsget = DB::table('friends')
            ->where( function(Builder $query) use($uid) {
                $query->where('requesteeid', $uid)
                      ->orWhere('inboundid', $uid);
            })
            ->where('approved', true)
            ->get(['requesteeid', 'inboundid']);

if(count($rowsget) > 0){
    foreach($rowsget as $get) {
        $temp1 = DB::table('users')
                ->where('id', $get->requesteeid)
                ->orWhere('id', $get->inboundid)
                ->get(['username']);
    }
    //Echoing data (just test )
    echo $temp1;
    echo $rowsget;
}

结果(用户名是前两个ID的结果)

[{"username":"Max11"},{"username":"bob11"}]
[{"requesteeid":4,"inboundid":1},{"requesteeid":4,"inboundid":2}] 

2 个答案:

答案 0 :(得分:2)

您正在覆盖$temp1中的条目,并在循环外打印它,因此它将始终为您提供最后一个条目。

将其制成一个数组以包含所有条目:

$temp1 = [];
if(count($rowsget) > 0){
    foreach($rowsget as $get) {
        $temp1[] = DB::table('users')->where('id', $get->requesteeid)- 
>orWhere('id', $get->inboundid)->get(['username']);

 }
print_r($temp1);

答案 1 :(得分:0)

只需解决此问题

foreach($rowsget as $get) {
        $temp1 = DB::table('users')->where('id', $get->requesteeid)->orWhere('id', 
$get->inboundid)->get(['id', 'username', 'avatar']);
        foreach ($temp1 as $key) {
            if($key->id != $uid) {
            echo $key->username;
            }
        }