From 767830cf47eb90975b319c403defab4d421c09a3 Mon Sep 17 00:00:00 2001 From: Witel Group Date: Thu, 19 Dec 2024 08:15:40 +0000 Subject: [PATCH] create many to many relation between rahdaran and road item --- .../V3/RoadItemsProjectController.php | 16 +++++----- .../V3/RoadItemsProject/StoreRequest.php | 3 +- .../V3/RoadItemsProject/UpdateRequest.php | 3 +- app/Models/Rahdaran.php | 7 +++++ app/Models/RoadItemsProject.php | 12 ++++--- ...dd_column_to_road_items_projects_table.php | 31 ------------------- ...eate_rahdaran_road_items_project_table.php | 30 ++++++++++++++++++ 7 files changed, 55 insertions(+), 47 deletions(-) delete mode 100644 database/migrations/2024_12_14_133209_add_column_to_road_items_projects_table.php create mode 100644 database/migrations/2024_12_19_100450_create_rahdaran_road_items_project_table.php diff --git a/app/Http/Controllers/V3/RoadItemsProjectController.php b/app/Http/Controllers/V3/RoadItemsProjectController.php index 58bfe994..b9fb7875 100644 --- a/app/Http/Controllers/V3/RoadItemsProjectController.php +++ b/app/Http/Controllers/V3/RoadItemsProjectController.php @@ -50,14 +50,14 @@ class RoadItemsProjectController extends Controller $query = null; if ($user->hasPermissionTo('show-road-item-supervise-cartable')) { - $query = RoadItemsProject::query()->where('is_new', 1)->with('files'); + $query = RoadItemsProject::query()->where('is_new', 1)->with('files', 'rahdaran:id,name,code'); } elseif ($user->hasPermissionTo('show-road-item-supervise-cartable-province')) { if (is_null($user->province_id)) { return $this->errorResponse('استانی برای شما در سامانه ثبت نشده است!'); } $query = RoadItemsProject::query()->where('is_new', 1) - ->with('files')->where('province_id', auth()->user()->province_id); + ->with('files', 'rahdaran:id,name,code')->where('province_id', auth()->user()->province_id); } $data = DataTableFacade::run( @@ -154,7 +154,7 @@ class RoadItemsProjectController extends Controller $allowedFilters = $columns; $allowedSortings = $columns; - $query = RoadItemsProject::with('files') + $query = RoadItemsProject::with(['files', 'rahdaran:id,name,code']) ->where('is_new', 1) ->where('user_id', auth()->user()->id); @@ -207,7 +207,6 @@ class RoadItemsProjectController extends Controller $start_coordinates = explode(',', $request->start_point); $end_coordinates = $info_item->needs_end_point ? explode(',', $request->end_point) : null; $cmmsMachine = CMMSMachine::query()->find($request->cmms_machine_id); - $rahdar = Rahdaran::query()->find($request->rahdar_id); $attributes = [ 'start_lat' => $start_coordinates[0], @@ -238,8 +237,6 @@ class RoadItemsProjectController extends Controller 'activity_time' => $request->activity_time, 'cmms_machine_id' => $cmmsMachine->id, 'cmms_machine_code' => $cmmsMachine->machine_code, - 'rahdar_id' => $rahdar->id, - 'rahdar_code' => $rahdar->code, ]; $after_image = ($request->has('after_image') && $info_item->needs_image) ? @@ -252,6 +249,8 @@ class RoadItemsProjectController extends Controller $road_item = RoadItemsProject::store($user, $attributes, $before_image, $after_image, $request->observed_item_id); + $road_item->rahdaran()->attach($request->rahdaran_id); + if ($road_item == -1) { return response()->json([ 'message' => 'اقدام مربوطه قبلا رسیدگی شده است.' @@ -286,7 +285,6 @@ class RoadItemsProjectController extends Controller } $cmmsMachine = CMMSMachine::query()->find($request->cmms_machine_id); - $rahdar = Rahdaran::query()->find($request->rahdar_id); if ($info_item->needs_image) { if ($request->has('after_image')) { @@ -324,10 +322,10 @@ class RoadItemsProjectController extends Controller 'status_fa' => 'در حال بررسی', 'cmms_machine_id' => $cmmsMachine->id, 'cmms_machine_code' => $cmmsMachine->machine_code, - 'rahdar_id' => $rahdar->id, - 'rahdar_code' => $rahdar->code, ]); + $roadItemsProject->rahdaran()->sync($request->rahdaran_id); + auth()->user()->addActivityComplete(1155); diff --git a/app/Http/Requests/V3/RoadItemsProject/StoreRequest.php b/app/Http/Requests/V3/RoadItemsProject/StoreRequest.php index f4d0b688..3a99e8ae 100644 --- a/app/Http/Requests/V3/RoadItemsProject/StoreRequest.php +++ b/app/Http/Requests/V3/RoadItemsProject/StoreRequest.php @@ -33,7 +33,8 @@ class StoreRequest extends FormRequest 'before_image' => 'image|max:4096', 'after_image' => 'image|max:4096', 'cmms_machine_id' => 'required|exists:cmms_machines,id', - 'rahdar_id' => 'required|exists:rahdaran,id', + 'rahdaran_id' => 'required|array', + 'rahdaran_id.*' => 'required|exists:rahdaran,id', ]; } diff --git a/app/Http/Requests/V3/RoadItemsProject/UpdateRequest.php b/app/Http/Requests/V3/RoadItemsProject/UpdateRequest.php index 84a040ab..da9fe59e 100644 --- a/app/Http/Requests/V3/RoadItemsProject/UpdateRequest.php +++ b/app/Http/Requests/V3/RoadItemsProject/UpdateRequest.php @@ -32,7 +32,8 @@ class UpdateRequest extends FormRequest 'before_image' => 'image|max:4096', 'after_image' => 'image|max:4096', 'cmms_machine_id' => 'required|exists:cmms_machines,id', - 'rahdar_id' => 'required|exists:rahdaran,id', + 'rahdaran_id' => 'required|array', + 'rahdaran_id.*' => 'required|exists:rahdaran,id', ]; } } diff --git a/app/Models/Rahdaran.php b/app/Models/Rahdaran.php index 4302de52..a7fb8d73 100644 --- a/app/Models/Rahdaran.php +++ b/app/Models/Rahdaran.php @@ -4,6 +4,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; class Rahdaran extends Model { @@ -11,4 +12,10 @@ class Rahdaran extends Model protected $guarded = []; protected $table = 'rahdaran'; + protected $hidden = ['pivot']; + + public function roadItemsProject(): BelongsToMany + { + return $this->belongsToMany(RoadItemsProject::class,'rahdaran_road_items_project'); + } } diff --git a/app/Models/RoadItemsProject.php b/app/Models/RoadItemsProject.php index a2abfc1b..faa14780 100644 --- a/app/Models/RoadItemsProject.php +++ b/app/Models/RoadItemsProject.php @@ -5,6 +5,7 @@ namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Http\UploadedFile; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsToMany; class RoadItemsProject extends Model { @@ -55,8 +56,6 @@ class RoadItemsProject extends Model 'activity_date_time', 'cmms_machine_id', 'cmms_machine_code', - 'rahdar_id', - 'rahdar_code', ]; /** @@ -134,8 +133,6 @@ class RoadItemsProject extends Model 'is_new' => 1, 'cmms_machine_id' => $attributes['cmms_machine_id'], 'cmms_machine_code' => $attributes['cmms_machine_code'], - 'rahdar_id' => $attributes['rahdar_id'], - 'rahdar_code' => $attributes['rahdar_code'], ]); // if ($info_item->needs_image) { @@ -165,7 +162,7 @@ class RoadItemsProject extends Model ]); } - return 1; + return $road_item; }); return $road_item; @@ -173,4 +170,9 @@ class RoadItemsProject extends Model throw $th; } } + + public function rahdaran(): BelongsToMany + { + return $this->belongsToMany(Rahdaran::class,'rahdaran_road_items_project'); + } } diff --git a/database/migrations/2024_12_14_133209_add_column_to_road_items_projects_table.php b/database/migrations/2024_12_14_133209_add_column_to_road_items_projects_table.php deleted file mode 100644 index 818de512..00000000 --- a/database/migrations/2024_12_14_133209_add_column_to_road_items_projects_table.php +++ /dev/null @@ -1,31 +0,0 @@ - foreignId('rahdar_id')->nullable()->constrained('rahdaran'); - $table->string('rahdar_code')->nullable(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::table('road_items_projects', function (Blueprint $table) { - $table->dropForeign(['rahdar_id']); - $table->dropColumn('rahdar_id'); - $table->dropColumn('rahdar_code'); - }); - } -}; diff --git a/database/migrations/2024_12_19_100450_create_rahdaran_road_items_project_table.php b/database/migrations/2024_12_19_100450_create_rahdaran_road_items_project_table.php new file mode 100644 index 00000000..423c9e52 --- /dev/null +++ b/database/migrations/2024_12_19_100450_create_rahdaran_road_items_project_table.php @@ -0,0 +1,30 @@ +id(); + $table->foreignId('rahdaran_id')->constrained('rahdaran')->onDelete('cascade'); + $table->unsignedBigInteger('road_items_project_id'); + $table->foreign('road_items_project_id')->references('id')->on('road_items_projects')->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('rahdaran_road_items_project'); + } +};