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表的查询中......什么是正确的方法?


临摹微笑
浏览 149回答 1
1回答

米琪卡哇伊

你有两个问题:您需要使用函数名称而不是表名称来建立关系。如果您想使用其他参数$query,请使用use。->when($keyword, function($query) use ($keyword){&nbsp; &nbsp; &nbsp; &nbsp; $query->with(["basicInfos" => function($query) use ($keyword){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return $query->where("wedding_style", "LIKE", "%$keyword%");&nbsp; &nbsp; &nbsp; &nbsp; }]);&nbsp; &nbsp; })
打开App,查看更多内容
随时随地看视频慕课网APP