Controller
<?php
namespace App\Http\Controllers\Voyager;
use Illuminate\Support\Facades\Log;
use App\Exports\MyObjectsExport;
use App\Http\Controllers\Controller;
use App\Imports\MyObjectsImport;
use App\Models\MyObject;
use App\Models\ObjectCoordinate;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use Illuminate\Support\Facades\DB;
class VoyagerMyObjectController extends Controller
{
public function index(Request $request)
{
$searchQuery = $request->input('search');
if ($searchQuery) {
$objects = MyObject::where('name', 'LIKE', "%$searchQuery%")
->orWhere('address', 'LIKE', "%$searchQuery%")
->paginate(10);
} else {
$objects = MyObject::paginate(10);
}
return view('admin.objects.index', compact('objects'));
}
public function create()
{
return view('admin.objects.create');
}
public function export()
{
$fileName = 'my_objects.xlsx';
return Excel::download(new MyObjectsExport(), $fileName);
}
public function store(Request $request)
{
DB::enableQueryLog(); $validatedData = $request->validate([
'name' => 'required',
'latitude' => 'required',
'longitude' => 'required',
'municipal_entity' => 'nullable',
'platform_name' => 'nullable',
'platform_format' => 'nullable',
'total_area' => 'nullable',
'object_type' => 'nullable',
'address' => 'nullable',
'nearest_city' => 'nullable',
'economic_activities' => 'nullable',
'ownership_form' => 'nullable',
'free_land_area' => 'nullable',
'cadastre_number' => 'nullable',
'cadastre_value' => 'nullable',
'vri' => 'nullable',
'coordTableName' => 'required',
'land_survey' => 'nullable',
'land_category' => 'nullable',
'planning_documents' => 'nullable',
'water_supply' => 'nullable',
'gas_supply' => 'boolean',
'electricity_supply' => 'boolean',
'waste_removal' => 'boolean',
'road_access' => 'boolean',
'railway' => 'boolean',
]);
try {
// Шаг 1: Валидация и получение координат
$validatedData = $request->validate([
// ... ваши правила валидации ...
]);
$coordinates = $request->input('coordTableName');
$coordinatesArray = explode(',', $coordinates);
// Шаг 2: Создание объекта и координат
if (count($coordinatesArray) != 2) {
return redirect('/admin/my-objects')->with('error', 'Некорректный формат координат');
}
$latitude = trim($coordinatesArray[0]);
$longitude = trim($coordinatesArray[1]);
$validatedData['gas_supply'] = $request->has('gas_supply');
$validatedData['electricity_supply'] = $request->has('electricity_supply');
$validatedData['waste_removal'] = $request->has('waste_removal');
$validatedData['road_access'] = $request->has('road_access');
$validatedData['railway'] = $request->has('railway');
$object = MyObject::create($validatedData);
$coordinateData = [
'latitude' => $latitude,
'longitude' => $longitude,
'object_id' => $object->id,
];
ObjectCoordinate::create($coordinateData);
// Шаг 3: Обработка дополнительных координат
$additionalCoordinates = [];
for ($i = 1; $i <= 1000; $i++) {
$additionalLatitudeKey = "latitude{$i}";
$additionalLongitudeKey = "longitude{$i}";
if ($request->has($additionalLatitudeKey) && $request->has($additionalLongitudeKey)) {
$additionalLatitude = trim($request->input($additionalLatitudeKey));
$additionalLongitude = trim($request->input($additionalLongitudeKey));
$additionalCoordinates[] = [
'latitude' => $additionalLatitude,
'longitude' => $additionalLongitude,
];
}
}
$object->additional_coordinates = $additionalCoordinates;
$object->save();
// Шаг 4: Сохранение изменений
return redirect('/admin/my-objects')->with('success', 'Объект успешно создан');
} catch (\Exception $e) {
// Логируем ошибку
\Log::error($e);
// Возвращаем пользователю сообщение об ошибке
return redirect('/admin/my-objects')->with('error', 'Произошла ошибка при сохранении: ' . $e->getMessage());
}
}
public function edit($id)
{
$object = MyObject::find($id);
$coordTableName = $object->coordTableName ?? null;
return view('admin.objects.edit', compact('object', 'coordTableName'));
}
public function update(Request $request, $id)
{
$validatedData = $request->validate([
'name' => 'required',
'municipal_entity' => 'nullable',
'platform_name' => 'nullable',
'platform_format' => 'nullable',
'total_area' => 'nullable',
'object_type' => 'nullable',
'address' => 'nullable',
'nearest_city' => 'nullable',
'economic_activities' => 'nullable',
'ownership_form' => 'nullable',
'free_land_area' => 'nullable',
'cadastre_number' => 'nullable',
'cadastre_value' => 'nullable',
'vri' => 'nullable',
'land_survey' => 'nullable',
'land_category' => 'nullable',
'planning_documents' => 'nullable',
'water_supply' => 'nullable',
'gas_supply' => 'boolean',
'electricity_supply' => 'boolean',
'waste_removal' => 'boolean',
'road_access' => 'boolean',
'railway' => 'boolean',
'coordTableName' => 'nullable',
'latitude' => 'nullable',
'longitude' => 'nullable',
// ... другие правила валидации для дополнительных координат ...
]);
try {
$object = MyObject::find($id);
$coordinates = $request->input('coordTableName');
$coordinatesArray = explode(',', $coordinates);
if (count($coordinatesArray) >= 2) {
$object->latitude = trim($coordinatesArray[0]);
$object->longitude = trim($coordinatesArray[1]);
} else {
return redirect("/admin/my-objects/{$id}/edit")->with('error', 'Некорректный формат координат');
}
$additionalCoordinates = [];
for ($i = 1; $i <= 1000; $i++) {
$additionalLatitudeKey = "latitude{$i}";
$additionalLongitudeKey = "longitude{$i}";
if ($request->has($additionalLatitudeKey) && $request->has($additionalLongitudeKey)) {
$additionalLatitude = trim($request->input($additionalLatitudeKey));
$additionalLongitude = trim($request->input($additionalLongitudeKey));
$additionalCoordinates[] = ['latitude' => $additionalLatitude, 'longitude' => $additionalLongitude];
}
}
// Остальные поля объекта
$object->update($validatedData);
// В методе update
Log::debug('Validated Data:', $validatedData);
Log::debug('Coordinates:', $coordinates);
Log::debug('Additional Coordinates:', $additionalCoordinates);
// После обновления остальных полей объекта и перед сохранением
Log::debug('Object before saving:', $object);
$object->save();
return redirect('/admin/my-objects')->with('success', 'Объект успешно обновлен');
} catch (\Exception $e) {
return redirect("/admin/my-objects/{$id}/edit")->with('error', 'Произошла ошибка: ' . $e->getMessage());
}
}
public function destroy($id)
{
MyObject::destroy($id);
return redirect()->route('voyager.my-objects.index')->with('success', 'Объект успешно удален');
}
}