0
votes

I have this StoreRequest with some validation about nested model.
ex. $rules['replica.host'] = 'required';

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;
}

i have one to one relationship on Database and Replica (Database too), but on store i get this exception:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'replica.name' in 'where clause' (SQL: select count(*) as aggregate from databases where replica.name = Demo Replica)

any help ?

1

1 Answers

1
votes

This is because laravel uses dot . for nested value but I read this statement

This issue doesn't exist anymore in laravel 5.3, we replace the dot in attribute names with -> before starting any check.

Read here : https://github.com/laravel/framework/issues/14211

If it is possible please replace replica.name by replica_name and same for other. To not conflict with laravel nested check.