Laravel 两张表的组合查询

Posted

技术标签:

【中文标题】Laravel 两张表的组合查询【英文标题】:Laravel combination query of two tables 【发布时间】:2021-11-22 12:24:20 【问题描述】:

我有以下表格:

我想要的是获得 product_types_values ptv,其中他们的 ptv.type_id == 1 并且不存在任何 variant v 其中他们的 v.id_type == 1 及其 v.value == ptv.value

在 SQL 中会是这样的:

SELECT *
FROM products_types_values ptv
WEHRE ptv.type_id = 1 and ptv.value not in (SELECT v.value
                                            FROM variants v
                                            WEHRE v.type_id = 1)

例如,在图片的表格中,我想要得到的结果是 products_types_values 8, 9, 10, 11, 1213. p>

在控制器中,我得到了一些变体和 product_types_values,并将它们存储在 $variants 和 $products_types_values 上。也许解决方案是使用这些变量或进行另一个查询。

我的代码是:

$variants = Variant::where('id_product', $id)->orderBy('id', 'Asc')->paginate(10);
$products_types_values = ProductTypeValue::where('type_id', $product->type_id)->orderBy('value', 'Asc')->get();

【问题讨论】:

【参考方案1】:
ProductTypeValue::where('type_id', $product->type_id)
                ->whereNotIn('value', function ($query) use ($product) 
                    $query->select('v.value')
                          ->from('variants', 'v')
                          ->where('v.type_id', $product->type_id);
                )
                ->get();

【讨论】:

Okey,例如,如果我有这个$variants = Variant::where('id_product', $id)->orderBy('id', 'Asc')->paginate(10);,并且我想获得具有最高代码的变体,我怎样才能在不进行其他查询的情况下实现呢?有可能吗? 我认为至少不做子查询是不可能的。 也许您可以使用收集方法。我认为 max() 让你传递一个回调。 我猜你也可以做类似Variant::select('*')->selectSub(function ($sub) $sub->selectRaw('max(code)')->from('variant'); , 'max')->...

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

数据库多表查询

学习记录:Leetcode175.组合两张表以及sql四种连接

leetcode中的sql

用PHP+mysql查询两个表,然后怎么样把已经查出来的两个数组合并在一起,两张表里有一个相同的字段

MySQL突击:组合两张表

上)