首页 >数据库 >mysql教程 >如何将子查询与 Laravel 的 `whereIn` 子句一起使用?

如何将子查询与 Laravel 的 `whereIn` 子句一起使用?

Patricia Arquette
Patricia Arquette原创
2024-12-07 12:47:16931浏览

How to Use Subqueries with Laravel's `whereIn` Clause?

将子查询合并到 Laravel 查询中:子查询 WHERE IN 示例

在处理复杂的数据库查询时,子查询提供了一种强大的检索数据的方法来自多个表或基于计算过滤结果。 Laravel 是一个流行的 PHP 框架,提供了一个易于使用的界面来处理子查询。

问题:

您需要在 Laravel 中创建一个查询来提取使用子查询根据“product_category”表中的值过滤“products”表中的数据。具体来说,您希望包含满足以下条件的行:

  • “products”表中的“id”必须出现在“product_category”表的“product_id”列中。
  • “product_category”中的类别 ID 值为“223”或“15”
  • “产品”表中的“活动”列设置为 1。

解决方案:

要实现此目的, Laravel 提供了一种灵活的方法来将子查询合并到您的查询中,使用闭包:

Products::whereIn('id', function($query){
    $query->select('product_id')
    ->from(with(new ProductCategory)->getTable())
    ->whereIn('category_id', ['223', '15'])
    ->where('active', 1);
})
->get();
  1. 子查询定义(在闭包中):

    • function($query):定义subquery.
    • $query->select(...):指定子查询中的哪一列想要找回。在本例中,它是“product_id”。
    • from(with(new ProductCategory)->getTable()):确定从中获取子查询数据的表。它引用“product_category”表。
    • ->whereIn('category_id', ['223', '15']):设置子查询的过滤条件,将结果限制为“category_id”所在的行是“223”或“15”。
    • ->where('active', 1): 添加额外的过滤器以确保“product_category”表中的“active”设置为 1。
  2. 主查询:

    • whereIn('id', ...):这是使用定义的子查询的主查询在关闭中。它将“products”表中的“id”列与子查询结果中的“product_id”进行匹配。

以上是如何将子查询与 Laravel 的 `whereIn` 子句一起使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn