Php 如何使用Yii验证多个模型?

Php 如何使用Yii验证多个模型?,php,validation,yii,Php,Validation,Yii,我使用以下代码来保存和验证Booking和BookingRoom(链接表)模型,但一次只能验证一个。我成功地保存并填充了我的数据库,但验证是按顺序进行的 $Booking->save() $BookingRoom->save() 如何验证和保存多个模型?您应该从模型中调用validate()方法,如下面的示例: // populate input data to $a and $b $a->attributes=$_POST['A']; $b->attributes=

我使用以下代码来保存和验证Booking和BookingRoom(链接表)模型,但一次只能验证一个。我成功地保存并填充了我的数据库,但验证是按顺序进行的

$Booking->save()

$BookingRoom->save()


如何验证和保存多个模型?

您应该从模型中调用validate()方法,如下面的示例:

// populate input data to $a and $b
    $a->attributes=$_POST['A'];
    $b->attributes=$_POST['B'];

    // validate BOTH $a and $b
    $valid=$a->validate();
    $valid=$b->validate() && $valid;

    if($valid)
    {
        // use false parameter to disable validation
        $a->save(false);
        $b->save(false);
        // ...redirect to another page
    }

有关更多信息,请参见此。

解释
$valid=$a->validate()$valid=$b->validate()&&$valid-

  • $valid=$a->validate()将根据验证返回
    TRUE
    FALSE

    因此,让我们假设
    $valid=TRUE

  • 现在当
    $valid=$b->validate()和&$valid被执行

    执行下一个模型的验证,并返回一些值
    (TRUE或FALSE)

  • 语句看起来像
    $valid=TRUE&&TRUE
    $valid=FALSE&&TRUE

  • 因此,现在
    if($valid){[…]}
    $valid
    的值是
    TRUE
    FALSE


    你可以像($model->validate()&&&$BookingRoom->validate()){$model->save(false);$BookingRoom->save(false);}一样进行验证。
    一些模型->save()
    总是需要单独调用。这似乎对我不起作用。我没有收到任何错误消息。你的意思是即使表单有错误也没有错误消息?错误消息是针对预订模型显示的,但不针对BookingRoom模型显示的。由@Everton给出的答案就可以了。我的意思是使用
    $valid
    的方式。它现在正在工作。谢谢我不知道代码在做什么。。。你能解释一下$valid=$a->validate()吗$valid=$b->validate()&&$valid@库纳尔在下面的回答中解释道:)