gpt4 book ai didi

php - 使用多种不同查询的高级搜索查询

转载 作者:行者123 更新时间:2023-11-29 23:35:41 24 4
gpt4 key购买 nike

目前,用户可以添加在我们的数据库中搜索的条件以查找任何匹配的结果。这是完美的工作,但是,现在需要“增强”搜索。为了让事情变得更清楚,下面有一个工作示例:

场景

用户想要购买特性:

  1. 在某个位置
  2. 拥有 4 间卧室
  3. 是否分离
  4. 价格范围在 30 万 - 50 万美元之间。

这将被添加到数据库中,然后下面的函数会查找任何匹配的属性(缩写):

$locations = Location::whereHas('coordinate', function ($q) use 
($bedrooms, $property_type)
{
$q->where('bedrooms', '=', $bedrooms)
->where('type', '=', $property_type);

})->lists('id');

正如您所看到的,查询非常“设置”为仅查询一个数量的卧室和一个特性类型” - 它只是同一变量上的一个变量行!

现在,问题来了。

目前,用户可以添加对卧室、房屋类型等的一种偏好...更改是为卧室、房屋类型添加多选 house 等...因此新的查询将针对用户:

建议的场景

  1. 在某个位置内(始终是一个位置)
  2. 拥有 3,4,5,6 间卧室
  3. 独立式、单间公寓、半独立式、平房
  4. 价格范围在 30 万至 50 万美元之间。 (始终是一个范围)。

我的问题主要是建议,如何存储这样的查询,然后查询它以返回符合其条件的任何属性。当前每个条件都存在于一行中,但我想我必须有一个单独的表来存储卧室数量等...?

此外,例如,如果一个用户只想要 1 间卧室和 独立式、单间公寓、半独立式、平房,而不是另一个标准可能相差甚远的用户更深入地说,查询如何适应这种情况?

Instead of completely redesigning my tables, could I not serialize the number of bedrooms etc.. and then store them in VARCHAR, and un-serialize them on request?

我希望我已经清楚地解释了事情,包括提供我当前的代码。如果您需要更多信息,请告诉我。非常感谢。

最佳答案

您可以使用逻辑来控制 where 子句,具体取决于设置的值和/或它们是否是数组。您可以编写以下内容,而不是链接 where 语句:

//bedrooms (required, mixed)
if(is_array($bedrooms)){
$q->whereIn('bedrooms', $bedrooms)
}else{
$q->where('bedrooms', '=', $bedrooms)
}
//type (required, mixed)
if(is_array($property_type)){
$q->whereIn('type', $property_type)
}else{
$q->where('type', '=', $property_type)
}
//minimum price (optional, int)
if(isset($min_price)){
$q->where('price', '>=' , $min_price)
}
//maximum price (optional, int)
if(isset($max_price)){
$q->where('price', '<=' , $max_price)
}

这只是一个基于您提供的内容的快速示例,但我可能会看到如何重构调用或传递给查询的值以尝试提高代码可读性。

关于php - 使用多种不同查询的高级搜索查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26387712/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com