嵌套模型上的Laravel验证会抛出QueryException

时间:2017-07-29 15:10:41

标签: php laravel validation

我对此StoreRequest进行了一些关于嵌套模型的验证 恩。 $ rules [' replica.host'] =' required&#39 ;;

public function rules()
{
    $rules = [
        'host' => 'required',
        'port' => 'required',
        'user' => 'required'
    ];

    if($this->route('database')){
        $db = $this->route('database');

        $rules['name'] = 'required|unique:databases,name,'. $db->id;
        $rules['database'] = 'required|unique_with:databases,host,' . $db->id;
    }else{
        $rules['name'] = 'required|unique:databases';
        $rules['database'] = 'required|unique_with:databases,host';

        if($this->has('replica.name')){
            $rules['replica.name'] = 'required|unique:databases';
            $rules['replica.database'] = 'required|unique_with:databases,host';
            $rules['replica.host'] = 'required';
            $rules['replica.port'] = 'required';
            $rules['replica.user'] = 'required';
        }
    }

    return $rules;
}

我在数据库和副本(数据库)上有一对一的关系, 但在商店我得到这个例外:

  

SQLSTATE [42S22]:未找到列:1054未知列' replica.name'在' where子句' (SQL:选择count(*)作为databases的聚合,其中replicaname =演示副本)

任何帮助?

1 个答案:

答案 0 :(得分:1)

这是因为laravel使用点.表示嵌套值,但我读了这句话

  

laravel 5.3中不再存在此问题,   我们替换属性名称中的点   用 - >在开始任何检查之前。

请在此处阅读:https://github.com/laravel/framework/issues/14211

如果可能,请将replica.name替换为replica_name,将其替换为<Grid> <Grid.ColumnDefinitions> <ColumnDefinition Width="1*"/> <ColumnDefinition Width="Auto"/> <ColumnDefinition Width="1*"/> </Grid.ColumnDefinitions> <Separator Grid.Column="0" Margin="5"/> <TextBlock Text="Hello" Grid.Column="1"/> <Separator Grid.Column="2" Margin="5"/> </Grid> 。与laravel嵌套检查不冲突。