【发布时间】:2020-10-07 15:17:02
【问题描述】:
我正在实现搜索功能,并根据查询参数使用不同的类进行搜索。
class Search {
public function getResults()
{
if (request('type') == 'thread') {
$results = app(SearchThreads::class)->query();
} elseif (request('type') == 'profile_post') {
$results = app(SearchProfilePosts::class)->query();
} elseif (request()->missing('type')) {
$results = app(SearchAllPosts::class)->query();
}
}
现在当我想搜索线程时,我有以下代码。
class SearchThreads{
public function query()
{
$searchQuery = request('q');
$onlyTitle = request()->boolean('only_title');
if (isset($searchQuery)) {
if ($onlyTitle) {
$query = Thread::search($searchQuery);
} else {
$query = Threads::search($searchQuery);
}
} else {
if ($onlyTitle) {
$query = Activity::ofThreads();
} else {
$query = Activity::ofThreadsAndReplies();
}
}
}
}
解释代码。
如果用户输入搜索词($searchQuery)则使用Algolia进行搜索,否则直接进行数据库查询。
-
如果用户输入搜索词
- 如果用户已选中onlyTitle复选框,则使用Thread索引
- 如果用户没有选中onlyTitle复选框,请使用Threads索引
-
如果用户没有输入搜索词
- 如果用户已选中onlyTitle复选框,则获取所有线程
- 如果用户没有选中onlyTitle复选框,则获取所有话题和回复
是否有一种模式可以简化嵌套的 if 语句,或者我应该为以下情况创建一个单独的类
- 用户输入了搜索词
- 用户尚未输入搜索词
在每个类中检查用户是否选中了onlyTitle复选框
【问题讨论】:
-
你能分享更多细节吗?毕竟这看起来不像是有效的 PHP 代码。另外,看看stackoverflow.com/questions/1804192/…
-
奇怪。这篇文章的第一个版本没有包含任何功能部分 -
class Search {紧随其后的是if声明 -
我不清楚问题是什么;听起来您对代码有外观问题?
-
其实是的,我想避免使用所有这些 if else 语句并让代码更简洁