【问题标题】:Yii2 - dynamic min and max value validation rulesYii2 - 动态最小值和最大值验证规则
【发布时间】:2016-08-09 15:47:03
【问题描述】:

如何为特定项目创建动态最小和最大验证?

对于购买,我使用模型 Buy,对于产品,我使用模型 Products。我需要在 Buy 模型中实现此规则。

示例 - 我正在查找 ID 为 12 的商品,该商品的库存量为 100 件(需要达到最大值),最少订购量为 10 件(需要达到最小值)。 p>

编辑:

产品(项目)表:

id
name
stock
minOffer

购买表:

id
offer
product_id
user_id

购买报价不能大于产品表中的当前库存。

【问题讨论】:

  • 如果您可以列出视图中的所有字段并指定每个字段属于哪个模型,那就太好了
  • @KiranMuralee - 我添加了表格描述。
  • 所以你的意思是如果 item id 值等于 12,那么 stock max 应该是 100。为什么不使用自定义验证器。
  • 我需要一个自定义验证器,但我需要将产品中的 id 插入到购买验证中。我不知道该怎么做。然而:)
  • @sasha。我假设购买与产品有关系。所以在购买模型中,有一个明确的产品对象可以使用。如果你能告诉我你的购买和产品模型,我会得到一个清晰的图片,我将能够建议自定义验证代码的方式:)。

标签: php yii2


【解决方案1】:

在您的 Buy 模型中,您可以编写自定义规则,如下所示。

public function rules()
    {
        return [
            ['product_id', 'checkmaxandminvalues'],//assuming product_id is a field in Buy

            // other rules
        ];
    }

public function checkmaxandminvalues($attribute, $params)
{
    $your_product=Products::find()->where(['_id'=>$this->product_id])->one();

    //Here you do your validation logic
    if($your_product->_id === 12 && $your_product->stock > 100)
    {
        $this->addError('product_id', 'Product stock should not be greater than 100');
    }
   else if($your_product->_id===12 && $your_product->stock < 10)
   {

        $this->addError('product_id', 'Product stock should not be less than 10');
   }
}

【讨论】:

    猜你喜欢
    • 2017-04-24
    • 2020-02-03
    • 2015-12-19
    • 2019-02-09
    • 2022-07-06
    • 2021-04-16
    • 2013-11-15
    • 1970-01-01
    • 2017-07-09
    相关资源
    最近更新 更多