1

I am using this subscription package https://github.com/overtrue/laravel-subscribe , so i want to get thread (post) associated with the space a user has subscribe to


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

1 回答 1

0

我最近遇到了一个几乎相同的问题。所以我会抄袭我自己的答案,希望它也可以为你量身定做。

要获取当前登录的用户,我们可以使用auth()->user()helper 函数。然后我们必须得到当前用户订阅的空间,所以如果你在你的用户模型中有一个关系,那将是完美的,你可以使用以下内容:

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

否则,您可以使用问题中的代码来获取用户订阅的空间,但我仍然建议在用户模型中为此创建一个方法:

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

我们得到了空间,但您需要的是这些空间的线程,因此我们必须添加更多逻辑,在其中获取您关注的那些空间的 ID,然后检索这些空间包含的所有线程,然后执行您需要的任何查询在最后。

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

我没有测试过这段代码,因为我没有相同的结构,所以你可能需要调试一两个东西来修复查询,但理论上它应该完全匹配你的结构。

于 2022-02-18T09:34:11.487 回答