Laravel включить сообщение пользователя в hasManyThrough - PullRequest
0 голосов
/ 20 мая 2018

Я создаю приложение для социальных сетей, в котором фид пользователя генерируется с помощью функции hasManyThrough для аутентифицированного пользователя, например: Auth::user()->feed.Вызываемая функция выглядит следующим образом:

public function feed() {
    $posts = $this->hasManyThrough(
        'App\Post',
        'App\Follow',
        'follow_by',
        'user_id',
        'id',
        'target_id'
    )->with('user', 'likes', 'comments')
    ->orderBy('id', 'DESC');

    return $posts;
}

Это сделано, поскольку я хочу проверить, за какими пользователями следует аутентифицированный пользователь, а затем найти сообщения этих людей.Однако я также хочу включить в запрос сообщения аутентифицированного пользователя.Ранее я делал это отдельно через $selfPosts = Post::where('user_id', Auth::user()->id)->with('user', 'likes', 'comments')->get();, а затем объединял запросы, используя $posts = $selfPosts->merge($followPosts)->sortByDesc('id');.

. Много проблем с объединением запросов, например, что я не могу использовать лимит или смещение.У меня вопрос: как включить сообщение аутентифицированного пользователя в функцию feed?

1 Ответ

0 голосов
/ 20 мая 2018

Как отметил Колин Барстоу в комментариях, простое решение, вероятно, является лучшим решением этой проблемы, а не выполнением множества сложных отношений и слияний.Это было мое окончательное решение (спасибо Колин):

    $DB_follows = Follow::where('follow_by', Auth::user()->id)->get();
    $follows = [Auth::user()->id];

    foreach ($DB_follows as $follow) {
        array_push($follows, $follow->target_id);
    }

    $posts = Post::whereIn('user_id', $follows)->with('user', 'likes', 'comments')->orderBy('id', 'DESC')->get();
    return $posts;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...