Laravel控制器中如何查询关联指定tag_id的房屋数据
正确的Laravel多对多关联查询写法
你的错误原因是直接在Rental_house表中查询tag_id字段,但这个字段实际存储在多对多的**数据透视表rentalhouse_tags**里,而非房屋主表,所以会触发字段不存在的报错。
要筛选关联特定tag_id的房屋,需要用whereHas方法针对关联模型的条件进行过滤,同时保留原有的分类ID筛选逻辑,正确代码如下:
$rentalcategoryhouses = Rental_house::whereIn('rentalcat_id', $rentalcategorydetails['catids']) ->whereHas('housetags', function ($query) use ($data) { $query->where('tag_id', $data['rentaltag']); }) ->with('housetags') // 可选:如果需要同时加载房屋关联的所有标签数据 ->get();
补充说明
whereHas:用来筛选存在符合条件的关联模型记录的主模型数据,这里就是确保房屋关联了指定tag_id的标签。- 如果只需要加载匹配的标签(而非所有关联标签),可以把
with('housetags')改成带闭包的形式:->with(['housetags' => function ($query) use ($data) { $query->where('tag_id', $data['rentaltag']); }])
内容的提问来源于stack exchange,提问作者stephen waweru99
相关产品推荐
相关产品推荐

