Неизвестный столбец «подписки» в «где пункт»

Я использую этот пакет подписки https://github.com/overtrue/laravel-subscribe , поэтому я хочу получить поток (сообщение), связанный с пространством, на которое подписался пользователь.

      
 $spaces = Space::whereHas('subscribers', function($query){
            $query->where('subscribable_id', '=', 'user_id');
        })->with('thread')->orderBy('id', 'desc')->paginate(10);

1 ответ

Совсем недавно я столкнулся с вопросом, задающим почти то же самое. Поэтому я буду использовать свой собственный ответ в надежде, что он также может быть адаптирован для вас.

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

      $space = auth()->user()->spaces;

В противном случае вы можете использовать свой код из своего вопроса, чтобы получить пространства, на которые подписан пользователь, но я бы все же посоветовал создать для этого метод внутри пользовательской модели:

      $spaces = Space::whereHas('subscribers', function($query){
        $query->where('subscribable_id', '=', 'user_id')->get();

У нас есть пробелы, но вам нужны потоки этих пространств, поэтому мы должны добавить больше логики, где мы извлекаем идентификаторы тех пространств, за которыми вы следуете, а затем извлекаем все потоки, содержащиеся в этих пространствах, чтобы затем выполнять любые запросы, которые вам нужны. в конце.

      $spaceIds = $spaces->pluck('id');
$threads = Thread::whereIn('space_id', $spaceIds)->latest()->paginate(10);

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

Другие вопросы по тегам