为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel 雄辩,连接表并进行过滤查询

Laravel 雄辩,连接表并进行过滤查询

PHP
临摹微笑 2022-05-27 16:29:12
我正在尝试向过滤表编写查询,但看起来有些不对劲。    $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表的查询中......什么是正确的方法?
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

你有两个问题:

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

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

->when($keyword, function($query) use ($keyword){

        $query->with(["basicInfos" => function($query) use ($keyword){

            return $query->where("wedding_style", "LIKE", "%$keyword%");

        }]);

    })


查看完整回答
反对 回复 2022-05-27
  • 1 回答
  • 0 关注
  • 148 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信