laravel查询多对多

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了laravel查询多对多相关的知识,希望对你有一定的参考价值。

我有2个模型,ServiceCategory。它们与多对多关系相关,如下所示:

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。

我根据发现的herehere的答案编写了该函数。

任何指针?

答案
->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 多对多查询

查询 Laravel Eloquent 多对多,其中所有 id 都相等

Laravel (8.x) 这个多对多过滤问题有更好的 Eloquent 查询吗?

在 Laravel 中查询用户的多对多关系

在 laravel 中搜索查询并计算结果的多对多关系

在 Laravel 4 中如何查询多对多关系?