【问题标题】:Laravel combination query of two tablesLaravel 两张表的组合查询
【发布时间】: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();

【问题讨论】:

    标签: sql laravel phpmyadmin


    【解决方案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')->...
    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 2017-07-24
    • 2017-04-04
    • 2014-05-31
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多