Laravel 多对多查询

Posted

技术标签:

【中文标题】Laravel 多对多查询【英文标题】:Laravel Many to Many Query 【发布时间】:2017-09-30 17:50:24 【问题描述】:

所以我有一个products 表和一个categories 表和一个pivot 表。

产品 (products)

--标识

--名字

类别 (categories)

--标识

--名字

CategoryProduct (category_product)

-- category_id

--product_id

我想获取属于某个类别的所有产品,我通过执行以下查询设法得到它:

$products = Category::find(3)->products;

但是我如何才能从产品模型中访问它呢?

$products = Product::?

【问题讨论】:

【参考方案1】:

您需要whereHas 子句。 https://laravel.com/docs/5.4/eloquent-relationships#querying-relationship-existence

$products = Product::whereHas('categories', function ($query) 
    return $query->where('id', 3);
)->get();

或者你可以用一个连接来代替。

$products = Product::select('products.*')
    ->join('category_product', 'products.id', '=', 'category_product.product_id')
    ->where('category_product.category_id', 3)
    ->groupBy('products.id')
    ->get();

【讨论】:

SQLSTATE[23000]:完整性约束违规:1052 where 子句中的列 'id' 不明确。那是我在运行您的代码时遇到的错误 哪个 sn-p 给出了这个错误?您是否添加了任何其他子句、范围等? 第一个sn-p。 @robertmylne 你做了什么编辑?出了什么问题? 编辑因某种原因被@pang 拒绝。这返回 $query->where('id', 3);改为这个 return $query->where('category_id', 3);删除错误

以上是关于Laravel 多对多查询的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 多对多查询

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

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

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

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

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