Код: Выделить всё
facilitiesВ методе store() моего контроллера я используйте PropertyStoreRequest для проверки. Запрос содержит такие поля, как удобства, дополнительные_услуги, удобства и т. д.
После проверки я ожидаю, что эти поля будут присутствовать в $validatedData, но по какой-то причине включены только удобства, а удобства и дополнительные_услуги отсутствуют.
Вот соответствующий код:
Проверка запроса (PropertyStoreRequest):
Код: Выделить всё
class PropertyStoreRequest extends FormRequest
{
public function authorize(): bool
{
return auth()->user()->isHost();
}
public function rules(): array
{
return [
'title' => 'required|string|max:255',
'description' => 'required|string',
'location' => 'required|string|max:255',
'price_per_night' => 'required|numeric|min:0',
'max_guests' => 'required|integer|min:1',
'photos' => 'required|array|min:3',
'photos.*' => 'image|mimes:jpg,jpeg,png|max:2048',
'facilities' => 'required|array',
'facilities.*' => 'integer|exists:facilities,id',
'additional_facilities' => 'nullable|array',
'additional_facilities.*' => 'integer|exists:additional_facilities,id',
'amenities' => 'required|array',
'amenities.*' => 'integer|exists:amenities,id',
];
}
protected function failedValidation(Validator $validator)
{
Log::error('Validation failed:', $validator->errors()->all());
throw new HttpResponseException(response()->json([
'errors' => $validator->errors(),
], 422));
}
}
Код: Выделить всё
public function store(PropertyStoreRequest $request)
{
Log::info('Property coming data:', $request->all());
$validatedData = $request->validated(); // Facilities and additional_facilities missing
// Create property
$property = Property::create([
'title' => $validatedData['title'],
'description' => $validatedData['description'],
'location' => $validatedData['location'],
'price_per_night' => $validatedData['price_per_night'],
'max_guests' => $validatedData['max_guests'],
'photos' => json_encode($this->handleFileUpload($request, 'photos', 'property_photos')),
'user_id' => auth()->id(),
'is_available' => $validatedData['is_available'] ?? true,
]);
// Syncing relations
$this->syncRelations($property, $validatedData, $request);
return response()->json($property, 201);
[2024-10-24 13:45:01] local.INFO: Данные о собственности: {...}
[2024-10 -24 13:45:01] local.INFO: проверенные данные из запроса: {... "amenities":["1","2"], "photos":[...][2024-10-24 13:45:01] local.INFO: Средства для синхронизации: []
[2024-10-24 13:45:01 ] local.INFO: Дополнительные возможности для синхронизации: []
[2024-10-24 13:45:01] local.INFO: Дополнительные возможности для синхронизации: [1,2]
Что я пробовал:
- Проверил наличие базы данных: оба объекта Таблицы и extra_facilities содержат действительные идентификаторы, соответствующие запросу.
- Переопределение данных вручную: я установил вручную объекты и дополнительные_возможности в контроллере после проверки и связи синхронизируются должным образом, что означает отсутствие проблем с синхронизацией — только с проверкой.
Подробнее здесь: https://stackoverflow.com/questions/791 ... quest-data
Мобильная версия