【问题标题】:Laravel where 'less than' query not showing expected resultsLaravel 的“小于”查询未显示预期结果
【发布时间】:2015-11-19 12:15:50
【问题描述】:

我正在尝试进行数据库查询,在其中搜索当前水平低于低库存水平的所有项目。运行查询时,我没有得到任何结果,我不知道为什么。

这是我的查询

public static function getLowStockItemsCache()
{
         dd(\DB::table('items')->where('current_level', '<', 'low_stock_level')->get());
    }

当我死掉并转储这个时,我会得到一个空集合。

在我的数据库中,我有以下记录

这两个字段都设置为 int(11)

如果我反转查询,我会得到所有 13 条记录。

我是否遗漏了一些小东西,因为它让我非常困惑并且应该很简单。

【问题讨论】:

  • 尝试whereRaw('current_level &lt; low_stock_level') 我猜它是与字符串'low_stock_level' 进行比较,而不是与列进行比较。我认为where()中的第三个参数必须是值,不能是列名。

标签: php mysql laravel eloquent


【解决方案1】:

第三个参数是 value 参数,表示在构建查询时会对其进行转义以避免 SQL 注入。如果要比较两列,则必须明确告诉查询生成器不应处理该部分查询,方法是使用 whereRaw 传递原始 SQL 条件:

\DB::table('items')->whereRaw('current_level < low_stock_level')->get());

或者只使用DB::raw() 作为值,所以它不会被转义:

\DB::table('items')->where('current_level', '<', DB::raw('low_stock_level'))->get());

【讨论】:

  • 这完全有道理。谢谢
  • 太棒了。工作谢谢你!!!
【解决方案2】:

Laravel 在“where”子句中使用 3 步参数,

Pair::where('1st','2nd','3rd')

默认情况下,第二个参数通常是默认等号,表示第一个参数等于第三个参数,

Pair::where('name', 'john')->get();

Pair::where('stock', '<', '100')->get();

当你找到这个逻辑时,你就会明白“在哪里”的技巧

【讨论】:

    猜你喜欢
    • 2011-10-02
    • 2020-06-16
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多