How to validate nested relation in request class in laravel

Viewed 13

I have two model that are related.

Models

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\MorphTo;
use Illuminate\Database\Eloquent\Factories\HasFactory;

class Address extends Model
{
    use HasFactory;

    protected $fillable = [
        'city',
        'post_code',
        'street',
        'country'
    ];

    protected $hidden = [
        'created_at',
        'updated_at',
        'addressable_id',
        'addressable_type'
    ];

    public function addressable(): MorphTo
    {
        return $this->morphTo();
    }

}
<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Club extends Model
{
    use HasFactory;

    protected $fillable = [
        'name',
        'email',
        'phone',
        'description',
        'user_id'
    ];

    protected $hidden = [
        'created_at',
        'updated_at'
    ];

    

    public function address()
    {
        return $this->morphMany(Address::class, 'addressable');
    }
}

For that models i've got Request class with validator rules.

Requests

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StoreAddressRequest extends FormRequest
{
 
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'city' => 'required|string|max:125',
            'post_code' => 'required|string', 
            'street' => 'required|string',
            'country' => 'required|string| max:125'
        ];
    }
}
<?php

namespace App\Http\Requests;

use App\Traits\FailedValidation;
use Illuminate\Foundation\Http\FormRequest;

class StoreClubRequest extends FormRequest
{
    use FailedValidation;

    public function authorize()
    {
        return true;
    }


    public function rules()
    {
        return [
            'name' => 'required|string|max:125',
            'description' => 'required|string',
            'email' => 'email:dns',
            'phone' => 'string|max:125',
            // 'address' => (new StoreAddressRequest)->rules(), ???
            'images' => 'required|image'
        ];
    }

}

Trying to create new club with address. I'm sending request to API like that:

[
"name":"dfsdf",
"dsfsdf":"sdfsdf",
"address": {
   "city": "name",
   "post_code":"46-454"
}
]

Address may be added standalone or from other model that are related too.

Now only fields from club request are validated.

How to validate club and address request?

0 Answers
Related