Laravel hasManyThrough манипулирует user_id

У меня проблемы с функцией hasManyThrough в Laravel.

Моя цель - получить фид, в котором будут отображаться сообщения, за которыми следит зарегистрированный пользователь. Я пытаюсь достичь этого путем:

  1. В User.php получите идентификатор вошедшего в систему пользователя
  2. Сопоставьте идентификатор пользователя со столбцами с именем user_id в Follow.php
  3. Получить target_id из строк в Follow.php
  4. Получить сообщения, где user_id соответствует target_ids из Follow.php

Я правильно извлекаю данные, кем следует пользователь. Однако user_id, который возвращается в данных, является зарегистрированным пользователем, а не автором сообщения. Зачем?

User.php

public function feed() {
return $this->hasManyThrough(
       'App\Post',
       'App\Follow',
       'user_id',
       'user_id',
       'id',
       'target_id'
)
->with('user')
->orderBy('id', 'DESC');
}

Post.php

public function user() {
    return $this->belongsTo('App\User');
}

Вызывается из контроллера через

$posts = Auth::user()->feed;

1 ответ

Решение

Ваш код создает этот запрос: select `posts`.*, `follows`.`user_id`...

Как вы видете, posts.user_id перезаписывается follows.user_id (follows.user_id необходимо для энергичной загрузки).

Я вижу два возможных решения вашей проблемы:

  1. переименовывать follows.user_id,
  2. Используйте два отдельных отношения: UserHasManyFollowHasManyPost
Другие вопросы по тегам