Php Laravel雄辩,连接表并进行筛选查询

Php Laravel雄辩,连接表并进行筛选查询,php,laravel,eloquent,Php,Laravel,Eloquent,我正在尝试将查询写入筛选表,但看起来有些不对劲 $keyword = "chapel"; $city = $request->get("city"); $price = $request->get("price"); 首先检查计划表是否为空。然后开始编写过滤查询 $datas = Place::whereHas("plans") ->groupBy("address","place_name") ->whe

我正在尝试将查询写入筛选表,但看起来有些不对劲

    $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
时,错误弹出并显示

调用模型>[App\model\Place]上的未定义关系[basic\u infos]

基本信息模型

public function basicInfos()
{
    return $this->hasMany("App\Model\BasicInfo");
}
public function place()
{
    return $this->belongsTo("App\Model\Place");
}
但是在查询
->when
函数中,当我使用
->with
时,似乎出现了一个问题。我猜,我在错误的时间使用它,否则。。。同样的事情肯定也会发生在
plan
表的查询上。。正确的方法是什么

您有两个问题:

  • 对于关系,您需要使用函数名而不是表名

  • 如果要使用除
    $query
    之外的其他参数,请使用

  • ->当($keyword,function($query)使用($keyword){
    $query->with([“basicInfos”=>函数($query)use($keyword){
    返回$query->where(“婚礼风格”、“喜欢”、“%$keyword%”);
    }]);
    })
    
    哦,我明白了。谢谢你指出这些。这很有帮助。
    public function place()
    {
        return $this->belongsTo("App\Model\Place");
    }