php - Laravel 雄辩,连接表并进行过滤查询
问题描述
我正在尝试向过滤表编写查询,但看起来有些不对劲。
$keyword = "chapel";
$city = $request->get("city");
$price = $request->get("price");
首先检查计划表是否为空。然后开始编写过滤查询。
$datas = Place::whereHas("plans")
->groupBy("address","place_name")
->when($keyword, function($query, $keyword) {
return $query->where("place_name", "LIKE", "%$keyword%");
})
->when($city, function($query, $city) {
return $query->where("city", "LIKE", "%$city%");
})
查询工作到 basic_info 表。但是当我$keyword
在basic_info
表中搜索时,然后会弹出错误并说
调用模型 > [App\Model\Place] 上的未定义关系 [basic_infos]。
//basic info table
->when($keyword, function($query) use ($keyword){
$query->with(["basic_infos" => function($query, $keyword){
return $query->where("basic_info.wedding_style", "LIKE", "%$keyword%");
}]);
})
//plan table
->when($price, function($query) use ($price){
$query->with(["basic_infos" => function($query, $price){
return $query->where("plans.plan_price", "<=", $price);
}]);
})
->paginate(20);
return $datas;
但实际上它是定义的。这是模型
放置模型
public function basicInfos()
{
return $this->hasMany("App\Model\BasicInfo");
}
基本信息模型
public function place()
{
return $this->belongsTo("App\Model\Place");
}
但是在查询内部->when
函数中,当我使用->with
它时,似乎出现了问题。我想,我在错误的时间使用它,否则......同样的事情肯定也会发生在plan
表的查询中......什么是正确的方法?
解决方案
你有两个问题:
您需要使用函数名称而不是表名称来建立关系。
如果您想使用其他参数
$query
,请使用use。
->when($keyword, function($query) use ($keyword){
$query->with(["basicInfos" => function($query) use ($keyword){
return $query->where("wedding_style", "LIKE", "%$keyword%");
}]);
})
推荐阅读
- c# - EF Core 3.1 (LINQ) - 如何在多列上左加入和分组
- html - 边框悬停
- javascript - 拖放不起作用(是我的数学问题还是 React 问题)
- firebase - Flutter - Firebase 云函数可调用函数格式错误
- javascript - Bootstrap 5 / jQuery:是否可以强制 bootstrap 5 立即注入其 jquery 插件,而不是在 DOMContentLoaded 之后?
- mongodb - 如何构建gridfs mongodb express.js 路由
- r - 在 Shiny 中保存多个 TinyMCE 的内容
- c# - Using reflection and transform C# to F# code
- python - 如何在 pysimplegui 中增加我的 inputText 框?
- python - 尝试使用 Python 将 .doc 转换为 .pdf 时出错