foreach не зацикливает все данные - PullRequest
0 голосов
/ 04 января 2019

мой первый запрос, который получает все строки, которые содержат как пользователя, который запросил дружбу (аутентифицированный идентификатор пользователя), так и входящую дружбу (входящий идентификатор пользователя). Это работает, если я отображаю $ rowget, он отображает правильные строки, проблема, с которой я сталкиваюсь, состоит в том, что он будет проходить только через два имени пользователя, как только я уберу возможность для него циклически проходить через собственное имя пользователя профиля, он будет только цикл через одну строку, затем остановка, я попробовал то, что некоторые люди сказали сделать, но теперь он говорит это сообщение об ошибке, когда я пытаюсь загрузить страницу профиля, "Объект класса Illuminate \ Support \ Collection не может быть преобразован в int" Здесь это код, любая помощь приветствуется, я застрял на этом в течение нескольких часов.

Запрос

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

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

Циклические имена пользователей

foreach($rowfetchfriend as $loop) {
        if($loop->id != $uid) { //make sure own user isnt displayed
            echo $loop->username; // echo all usernames that are
        }
    }
}

Ответы [ 2 ]

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

Вы можете использовать метод «толкать» сбора ларавеллы.

попробуйте это:

$rowfetchfriend = [];
    if(count($rowsget) > 0) {
        foreach($rowsget as $get) {
            $getrequestee = $get->requesteeid;
            $getinbound = $get->inboundid;
            $temp = DB::table('users')->where('id', $getrequestee)->orWhere('id', $getinbound)->get(['id', 'avatar', 'username']);
            array_push($rowfetchfriend, $temp->toArray());
        }
    }

и перебирать имена пользователей:

for ($i=0; $i < count($rowfetchfriend); $i++) {
        if($rowfetchfriend[$i][0]->id != $uid) { //make sure own user isnt displayed
            echo $rowfetchfriend[$i][0]->username; // echo all usernames that are
        }
    }

Я проверил и работаю правильно.

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

Используйте этот метод (или метод push ()) при добавлении в массив:

Вместо этого:

$rowfetchfriend += DB::table('users')->where('id', $getrequestee)->orWhere('id', $getinbound)->get(['id', 'avatar', 'username']);

Попробуйте это:

$rowfetchfriend[] = DB::table('users')->where('id', $getrequestee)->get(['id', 'avatar', 'username']);
$rowfetchfriend[] = DB::table('users')->where('id', $getinbound)->get(['id', 'avatar', 'username']);

Класс и его методы перечислены здесь: https://laravel.com/api/5.5/Illuminate/Support/Collection.html#method_count

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...