为了账号安全,请及时绑定邮箱和手机立即绑定

Laravel where - 如何在条件下引用相同的模态?

Laravel where - 如何在条件下引用相同的模态?

PHP
慕盖茨4494581 2021-10-22 15:19:55
我想在where()条件(Laravel 5.8)中使用一些自定义逻辑,例如下面的。该where()参数将根据变量而变化。下面的代码不起作用,但让您了解我想要实现的目标。我怎样才能得到想要的结果?\App\Model::where(function ($query) use ($quantity, $price_criteria) {    if ($model->threshold_1 <= $quantity) {        $compare = $model->price_1    } elseif ($model->threshold_2 <= $quantity) {        $compare = $model->price_2    } else {        $compare = $model->price_3    }     $query->where($compare, "<=", $price_criteria)}->orWhere...
查看完整描述

3 回答

?
开心每一天1111

TA贡献1836条经验 获得超13个赞

如果我正确理解您的问题,您可以使用whereRaw()查询来构建您的条件,或者使用where()/构建单独的查询条件whereOr()。


使用whereRaw(),


\App\Model::whereRaw("price_1 <= ? AND threshold_1 <= ?", [$price_criteria, $quantity])

          ->orWhereRaw("price_2 <= ? AND threshold_2 <= ?", [$price_criteria, $quantity])

          ->orWhereRaw("price_3 <= ?", [$price_criteria]);

或者使用 Eloquent,


\App\Model::where(function($query) use ($quantity, $price_criteria) {

               $query->where("price_1", "<=", $price_criteria)

                     ->where("threshold_1", "<=", $quantity);

           })->orWhere(function($query) use ($quantity, $price_criteria) {

               $query->where("price_2", "<=", $price_criteria)

                     ->where("threshold_2", "<=", $quantity);

           })->orWhere(function($query) use ($quantity, $price_criteria) {

               $query->where("price_3", "<=", $price_criteria)

           });


查看完整回答
反对 回复 2021-10-22
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

您应该$model像$quantity和一样传递参数$price_criteria(并添加一些标点符号:)):


\App\Model::where(function ($query) use ($quantity, $price_criteria, $model) {

            if ($model->threshold_1 <= $quantity) {

                $compare = $model->price_1;

            } elseif ($model->threshold_2 <= $quantity) {

                $compare = $model->price_2;

            } else {

                $compare = $model->price_3;

            }

            $query->where($compare, "<=", $price_criteria);

        })->orWhere();

希望有帮助。


查看完整回答
反对 回复 2021-10-22
?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

简单地说,你不能。您在这里所做的只是构建一个返回数据的 SQL 查询,并且在获取数据之前您无法访问该数据。为了以这种方式实际过滤数据,您需要首先检索所有数据并过滤集合


查看完整回答
反对 回复 2021-10-22
  • 3 回答
  • 0 关注
  • 241 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信