/** * Find posts by their IDs, optionally making sure they are visible to a * certain user. * * @param array $ids * @param \Flarum\Core\User|null $actor * @return \Illuminate\Database\Eloquent\Collection */ public function findByIds(array $ids, User $actor = null) { $discussions = $this->getDiscussionsForPosts($ids, $actor); $posts = Post::whereIn('id', $ids)->where(function ($query) use($discussions, $actor) { foreach ($discussions as $discussion) { $query->orWhere(function ($query) use($discussion, $actor) { $query->where('discussion_id', $discussion->id); event(new ScopePostVisibility($discussion, $query, $actor)); }); } })->get(); $posts = $posts->sort(function ($a, $b) use($ids) { $aPos = array_search($a->id, $ids); $bPos = array_search($b->id, $ids); if ($aPos === $bPos) { return 0; } return $aPos < $bPos ? -1 : 1; }); return $posts; }
/** * @param array $ids * @param User|null $actor * @return mixed */ protected function queryIds(array $ids, User $actor = null) { $discussions = $this->getDiscussionsForPosts($ids, $actor); return Post::whereIn('id', $ids)->where(function ($query) use($discussions, $actor) { foreach ($discussions as $discussion) { $query->orWhere(function ($query) use($discussion, $actor) { $query->where('discussion_id', $discussion->id); event(new ScopePostVisibility($discussion, $query, $actor)); }); } $query->orWhereRaw('FALSE'); }); }