Неизвестный столбец «подписки» в «где пункт»
Я использую этот пакет подписки 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);
Я не тестировал этот код, так как у меня другая структура, поэтому вам может потребоваться отладить кое-что, чтобы исправить запросы, но теоретически он должен идеально соответствовать вашей структуре.