Php Laravel SQL查询,其中+;其中+;或者在哪里
我在这个问题上遇到了一些问题,我没有主意,让我解释一下: 以下是我所拥有的:Php Laravel SQL查询,其中+;其中+;或者在哪里,php,mysql,laravel,query-builder,Php,Mysql,Laravel,Query Builder,我在这个问题上遇到了一些问题,我没有主意,让我解释一下: 以下是我所拥有的: 用户表(与此问题相关的列:名称、说明) 服务表(与此问题相关的列:名称、描述、子类别\u id、类别\u id) 用户服务关系的透视表 以下是我希望发生的事情: 应用程序必须能够通过文本搜索用户及其相关服务的名称/描述 此外,该应用程序可以为搜索发送一个类别id和多个子类别id,因此相关服务必须具有该id 第一次搜索效果不错,当我尝试第二次搜索时,问题就来了。就像它没有考虑查询的每个参数一样。我希望它只在类别i
- 用户表(与此问题相关的列:名称、说明)
- 服务表(与此问题相关的列:名称、描述、子类别\u id、类别\u id)
- 用户服务关系的透视表
- 应用程序必须能够通过文本搜索用户及其相关服务的名称/描述
- 此外,该应用程序可以为搜索发送一个类别id和多个子类别id,因此相关服务必须具有该id
$professionals = \DB::table('users')->where('role_id', Role::PROFESSIONAL_USER)
->join('professional_service', 'users.id', '=', 'professional_service.user_id', 'left')
->join('services', 'services.id', '=', 'professional_service.service_id', 'left')
->select('users.id', 'users.name as name', 'users.last_name as last_name', 'users.gender as gender', 'users.description as description', 'users.city', 'users.latitude', 'users.longitude', 'users.wpicture')
->where('users.name', 'like', '%'.$request->search.'%')
->where('services.category_id', '=', $request->category_id)
->orWhere('users.description', 'like', '%'.$request->search.'%')
->orWhere('services.name', 'like', '%'.$request->search.'%')
->orWhere('services.description', 'like', '%'.$request->search.'%')
->whereIn('services.subcategory_id', $request->subcategories)
->groupBy('users.id')
->paginate($request->per_page);
任何帮助都将不胜感激。谢谢
编辑(使用注释中建议的闭包):
现在的问题是,如果用户只按文本搜索,并且类别/子类别为空,则不会显示任何结果。如果它们为空,我怎么能忽略它们呢?找到了解决方案(我相信可以用更好的方法来完成,但这对我来说很有用):
感谢关于闭包的提示。如果您发布了完整的原始MySQL查询,您正试图使用Laravel语法对其进行建模,这可能会帮助您提出问题。请在查询中使用闭包。您需要设置一些特定的条件处理顺序,但您的普通where或where不提供您需要的顺序,并且使用常规(因此,首先对所有和进行求值,然后对或进行求值)。您必须使用提供逻辑所需的表达式处理顺序的。由于此注释取得了一些进展,将编辑我的问题,因为我遇到了另一个问题
$professionals = \DB::table('users')->where('role_id', Role::PROFESSIONAL_USER)
->join('professional_service', 'users.id', '=', 'professional_service.user_id', 'left')
->join('services', 'services.id', '=', 'professional_service.service_id', 'left')
->select('users.id', 'users.name as name', 'users.last_name as last_name', 'users.gender as gender', 'users.description as description', 'users.city', 'users.latitude', 'users.longitude')
->where(function($query) use ($search){ $query->where('users.name', 'like', '%'.$search.'%'); $query->orWhere('users.description', 'like', '%'.$search.'%'); $query->orWhere('services.name', 'like', '%'.$search.'%'); $query->orWhere('services.description', 'like', '%'.$search.'%');})
->where('services.category_id', '=', $request->category)
->whereIn('services.subcategory_id', explode(',', $request->subcategories))
->groupBy('users.id')
->paginate($request->per_page);
$professionals = \DB::table('users')->where('role_id', Role::PROFESSIONAL_USER)
->join('professional_service', 'users.id', '=', 'professional_service.user_id', 'left')
->join('services', 'services.id', '=', 'professional_service.service_id', 'left')
->select('users.id', 'users.name as name', 'users.last_name as last_name', 'users.gender as gender', 'users.description as description', 'users.city', 'users.latitude', 'users.longitude')
->where(function($query) use ($search){ $query->where('users.name', 'like', '%'.$search.'%'); $query->orWhere('users.description', 'like', '%'.$search.'%'); $query->orWhere('services.name', 'like', '%'.$search.'%'); $query->orWhere('services.description', 'like', '%'.$search.'%');})
->when($category, function($query) use ($category) { $query->where('services.category_id', '=', $category);})
->when($subcategories, function($query) use ($subcategories) { $query->whereIn('services.subcategory_id', $subcategories);})
->groupBy('users.id')
->paginate($request->per_page);