laravel查询多对多
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel查询多对多相关的知识,希望对你有一定的参考价值。
我有2个模型,Service和Category。它们与多对多关系相关,如下所示:
Service.php
public function categories()
{
return $this->belongsToMany('AppCategory')->withTimestamps();
}
Category.php
public function services()
{
return $this->belongsToMany('AppService')->withTimestamps();
}
当然还有一个数据透视表:
category_service
- category_id
- service_id
- created_at
- updated_at
我想使用本地范围根据类别ID过滤服务结果。我已经完成以下工作:
Service.php
public function scopeFilter($query, $category_ids)
{
$services = Service::whereHas('categories', function (Builder $query) use ($category_ids) {
$query->whereIn('category_id', $category_ids)->get();
});
return $services;
}
但是我遇到了Column not found
错误,具体是:
Column not found: 1054 Unknown column 'services.id' in 'where clause' (SQL: select * from `categories` inner join `category_service` on `categories`.`id` = `category_service`.`category_id` where `services`.`id` = `category_service`.`service_id` and `category_id` in (1, 2))
1和2是我通过的类别ID。
任何指针?
答案
将->get()
放在封口之外。public function scopeFilter($query, $category_ids)
{
$services = Service::whereHas('categories', function (Builder $query) use ($category_ids) {
$query->whereIn('category_id', $category_ids);
})->get();
return $services;
}
以上是关于laravel查询多对多的主要内容,如果未能解决你的问题,请参考以下文章
查询 Laravel Eloquent 多对多,其中所有 id 都相等