laravel - 当条件为真时搜索多列并加入另一个查询
问题描述
我想在帖子表中搜索搜索查询,我应该在标题和 slug 列中搜索,我还有一个复选框来仅搜索已发布的帖子。
在我的代码中,我的查询总是忽略 is_publish 查询。选中“搜索已发布的帖子”复选框后,如何仅搜索已发布的帖子?
$query = Post::when($request->target, function ($q) use ($request) {
$q->where('title','LIKE', "%$request->target%")->orWhere('slug', 'like', "%$request->target%");
})->when($request->publish, function ($query) use ($request) {
$query->where('is_publish', 1);
});
解决方案
你可以像下面这样写:
$query = Post::when($request->target, function ($q) use ($request) {
$q->whereRaw("(title LIKE '%$request->target%' or slug LIKE '%$request->target%')")
})->when($request->publish, function ($query) use ($request) {
$query->where('is_publish', 1);
});
推荐阅读
- firebase - 是否可以将 Firebase 项目的访问权限限制在给定的地理位置?
- material-ui - Material-UI:选择中的 v4.1.2 渲染值
- docker-compose - Hyperledger Composer:网络安装在公司代理后面失败
- browserify - 通过命令行将“全局”和“忽略”选项传递给 browserify
- amazon-web-services - 使用 SES 和 gmail 的虚假打开跟踪
- c# - 在 C# 中运行 PowerShell 命令时遇到问题
- python - 包含 r\n\ 的长字符串在 python 3.5 的 for 循环中反复操作
- spring-webflux - Spring webflux - 连续发射器
- reactjs - React:如何从使用来自 http Web 请求的数据的服务器获取响应
- python - 导出到excel时如何冻结第一列