【问题标题】:Laravel eloquent, joining tables and make filter queriesLaravel 雄辩,连接表并进行过滤查询
【发布时间】:2020-03-24 16:03:19
【问题描述】:

我正在尝试编写对过滤表的查询,但看起来有些不对劲。

    $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 表。但是当我在basic_info 表中搜索$keyword 时,会弹出错误并说

调用模型上未定义的关系 [basic_infos] > [App\Model\Place]。

    //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");
}

但是在-&gt;when函数内部的查询中,当我使用-&gt;with时,似乎出现了问题。我想,我在错误的时间使用它,否则......plan 表的查询肯定也会发生同样的事情......正确的方法是什么?

【问题讨论】:

    标签: php laravel eloquent


    【解决方案1】:

    你有两个问题:

    1. 你需要使用你的函数名而不是表名来建立关系。

    2. 如果您想使用除$query 之外的其他参数,请使用use

    ->when($keyword, function($query) use ($keyword){
            $query->with(["basicInfos" => function($query) use ($keyword){
                return $query->where("wedding_style", "LIKE", "%$keyword%");
            }]);
        })
    

    【讨论】:

    • 哦,我明白了。谢谢你指出那些。它帮助很大。
    猜你喜欢
    • 2018-11-18
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-11
    • 2018-01-26
    • 2021-07-23
    相关资源
    最近更新 更多