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, 12 和 13. 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四种连接