Не будет показывать всех друзей в базе данных laravel - PullRequest
0 голосов
/ 04 января 2019

Я создал таблицу друзей в базе данных, которая включает requestteeid (идентификатор пользователя, который запросил дружбу), inboundid (идентификатор пользователя, куда направляется запрос друга) и утвержденный столбец, в которомкогда установлено false = pending и когда установлено true = принято, в настоящее время кажется, что только один пользователь, когда я повторю запрос $ rowget, запросит все строки, которые имеют идентификатор профиля во входящем или исходящем, когда я попытаюсь изацикливаться, хотя я получаю только один, это последний пользователь, который добавил этого пользователя (inboundee) в друзья.Я потратил часы на это, любая помощь очень ценится!

Поиск по базе данных

<?php
$rowsget = DB::table('friends')->where('requesteeid', $uid)- 
>orWhere('inboundid', $uid)->where('approved', true)->get();

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']);


?>

Цикл по профилям друзей

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

1 Ответ

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

Бьюсь об заклад, ваш SQL будет неверным, когда вы используете его, как Yiu сделал.Подсказка: вы устанавливаете no () для разделения вашего (дай мне все n, где (x - это что-то или y - это что-то другое), а z - это правда).Вы делаете все это без (), поэтому он будет искать (x - это что-то) или y - это что-то другое, а z - это правда, поэтому все строки будут найдены, где z - это правда, а y - что-то другое, поэтому этот результат неверен.

Попробуйте

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

Вы всегда можете получить SQL-запрос, используя

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

Измените свой код на это:

$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']);
}

Ваше закрытиескобка неверна, и вы должны сложить результаты за цикл.Я бы выполнил другой sql, где я получаю свои результаты так, как я хочу, и не запускаю 2 запроса для этого (поиск "joins").

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