Цикл Foreach запускает запрос один раз - PullRequest
0 голосов
/ 05 января 2019

Я потратил часы на это и не могу найти способ обойти это, у меня есть запрос, который получает всех друзей с идентификатором профилей в запрашивающем или входящем разделе и проверяет, одобрен ли он, эта часть верна, как будто я выводя запрос, он возвращает все правильные строки, теперь, когда для каждой строки я хочу выполнить цикл и искать в базе данных пользователя, который соотносится с идентификатором запрашивающего или входящим идентификатором, который был в таблице друзей, в настоящее время он повторяется только один раз, Я знаю это, когда зацикливаю и $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;
}

Результаты (Имена пользователей - это результат первых двух идентификаторов)

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

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Только что исправили это

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;
            }
        }
0 голосов
/ 05 января 2019

Вы перезаписываете запись в $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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...