将先前查询的值访问到新的嵌套查询 laravel

Posted

技术标签:

【中文标题】将先前查询的值访问到新的嵌套查询 laravel【英文标题】:Acess value of previous query into new nested query laravel 【发布时间】:2019-02-26 18:45:28 【问题描述】:

我正在尝试使用以前模型的值查询数据,例如:MyModel->whereHas(MyModel.NestedModel.value > MyModel.value)

这是我正在尝试做的代码:

我的问题在$q->where('quantity', '<', 'inventoryItems.minimum_to_shopping');,我需要一种方法来比较当前数量与之前范围的数量。

$itemShould = InventoryItemMeta::with('inventoryItems', 'inventoryItems.lastItemValue', 'inventoryItems.inventory', 'inventoryItems.inventory.property')
            ->whereHas('inventoryItems', function ($q) 
                $q->where('should_shopping', true)
                ->whereHas('lastItemValue', function ($q)
                    $q->where('quantity', '<', 'inventoryItems.minimum_to_shopping');
                );
            )->get();

【问题讨论】:

请您提供您的代码附带的错误。 如果我使用 '' 所有物品都来了,好像 laravel 正在比较使用 inventoryItems.minimum_to_shopping 之类的字符串 请尝试$q-&gt;whereColumn('quantity', '&lt;', 'inventoryItems.minimum_to_shopping') 你是传奇 【参考方案1】:

您可以尝试使用whereColumn() 函数,它用于比较两列而不是一列与一个值,即:

$q->whereColumn('quantity', '<', 'minimum_to_shopping')

【讨论】:

在我的情况下,我只需要做 minimum_to_shopping,inventoryItems.minimum_to_shopping 会引发错误 这很奇怪,这个查询有效,但第一项总是被忽略,如果查询有效或第一项不来。我设置了数量最小值有什么想法吗? 请试试这个:代替最终的 ->get() 调用,您可以使用 ->toSql() 输出原始 sql,以便调试查询。 看起来不错,如果我使用inventory_items而不是inventoryItems也可以,有办法用运行值检查查询吗? select * from Inventory_Item_Metas where exists(select * from Inventory_Items where Inventory_Item_Metas . ID` = inventory_items 987654328 inventory_item_meta_idshould_shopping = 987654330 inventory_item_values 987654332 id @ 987654332 987654333@.inventory_item_idquantity inventory_items.minimum_to_shopping)) ` 安装 laravel/debugbar 包,它有一个有用的查询记录器。

以上是关于将先前查询的值访问到新的嵌套查询 laravel的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 之 子查询与嵌套查询

相关子查询 与 嵌套子查询 有何区别 ?

SQL嵌套子查询和相关子查询的执行过程有啥区别

SQL嵌套子查询和相关子查询的执行过程有啥区别

mysql怎么在查询中嵌套子查询

求SQL相关子查询和嵌套子查询通俗的区别 ?